diff --git a/.gitignore b/.gitignore index 0d9d7fb..9f0a6da 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ .externalNativeBuild app/src/main/res/values/admob.xml .idea/markdown-navigator.xml -.idea/markdown-navigator/ \ No newline at end of file +.idea/markdown-navigator/ +*.apk diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 0000000..96ede7e Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ba7052b..635999d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -24,7 +24,7 @@ - + diff --git a/app/app-release.apk b/app/app-release.apk deleted file mode 100644 index e082342..0000000 Binary files a/app/app-release.apk and /dev/null differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 1a89fe9..487cbbe 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -23,3 +23,17 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile + +-keepattributes *Annotation* +-keepclassmembers class com.google.**.R$* { + public static ; +} +-keep public class com.google.ads.** {*;} +-keep public class com.google.android.gms.** {*;} +-keep public class com.tappx.** { *; } + +-ignorewarnings + +-keep class * { + public private *; +} \ No newline at end of file diff --git a/app/release/output.json b/app/release/output.json new file mode 100644 index 0000000..c7a4761 --- /dev/null +++ b/app/release/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":278,"versionName":"1.3.2","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f1c3827..b519270 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,7 +24,6 @@ - diff --git a/app/src/main/java/com/jkanetwork/st/calendariodefrases/Config.java b/app/src/main/java/com/jkanetwork/st/calendariodefrases/Config.java index 610b4aa..6ef3f30 100644 --- a/app/src/main/java/com/jkanetwork/st/calendariodefrases/Config.java +++ b/app/src/main/java/com/jkanetwork/st/calendariodefrases/Config.java @@ -28,45 +28,45 @@ public class Config { return emContext.getSharedPreferences(SHARED_PREFS_FILE, 0); } - public Integer getHour(){ + Integer getHour(){ return getSettings().getInt(KEY_HOUR, 8); } - public Integer getMinute(){ + Integer getMinute(){ return getSettings().getInt(KEY_MINUTE, 0); } - public Boolean getNotifOn(){ + Boolean getNotifOn(){ return getSettings().getBoolean(KEY_NOTIFON, true); } - public Boolean getPersistNotifOn(){return getSettings().getBoolean(KEY_PERSISTNOTIFON, false);} - public Boolean getFirstTime(){return getSettings().getBoolean(KEY_FIRSTTIME, true);} + Boolean getPersistNotifOn(){return getSettings().getBoolean(KEY_PERSISTNOTIFON, false);} + Boolean getFirstTime(){return getSettings().getBoolean(KEY_FIRSTTIME, true);} - public void setHour(Integer hour){ + void setHour(Integer hour){ SharedPreferences.Editor editor = getSettings().edit(); editor.putInt(KEY_HOUR, hour ); editor.apply(); } - public void setMinute(Integer minute){ + void setMinute(Integer minute){ SharedPreferences.Editor editor = getSettings().edit(); editor.putInt(KEY_MINUTE, minute ); editor.apply(); } - public void setNotifOn(Boolean notifon){ + void setNotifOn(Boolean notifon){ SharedPreferences.Editor editor = getSettings().edit(); editor.putBoolean(KEY_NOTIFON, notifon ); editor.apply(); } - public void setPersistNotifOn(Boolean notifon){ + void setPersistNotifOn(Boolean notifon){ SharedPreferences.Editor editor = getSettings().edit(); editor.putBoolean(KEY_PERSISTNOTIFON, notifon ); editor.apply(); } - public void setFirstTime(Boolean notifon){ + void setFirstTime(Boolean firstTime){ SharedPreferences.Editor editor = getSettings().edit(); - editor.putBoolean(KEY_FIRSTTIME, notifon ); + editor.putBoolean(KEY_FIRSTTIME, firstTime ); editor.apply(); } diff --git a/app/src/main/java/com/jkanetwork/st/calendariodefrases/DatabaseHelper.java b/app/src/main/java/com/jkanetwork/st/calendariodefrases/DatabaseHelper.java index 1c08c09..eef83fd 100644 --- a/app/src/main/java/com/jkanetwork/st/calendariodefrases/DatabaseHelper.java +++ b/app/src/main/java/com/jkanetwork/st/calendariodefrases/DatabaseHelper.java @@ -14,7 +14,7 @@ import java.util.Calendar; import java.util.List; public class DatabaseHelper extends SQLiteOpenHelper { - private static final int DATABASE_VERSION = 10; + private static final int DATABASE_VERSION = 11; private static final String DATABASE_NAME = "database.db"; private final Context contextdb; @@ -24,7 +24,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { } /** Return the sentence passing the ID of it */ - public String getFraseFromID(int IDF){ + String getFraseFromID(int IDF){ SQLiteDatabase db = this.getWritableDatabase(); String sentence; @@ -46,7 +46,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { } } - public String getAutorFromID(int IDF){ + String getAutorFromID(int IDF){ SQLiteDatabase db = this.getWritableDatabase(); String sentence; @@ -65,9 +65,22 @@ public class DatabaseHelper extends SQLiteOpenHelper { } } + /** get fav or a IDFrase */ + Integer getFav(int IDF){ + SQLiteDatabase db = this.getWritableDatabase(); + try{ + Cursor query = db.rawQuery("SELECT IDFrase FROM frasesFav WHERE IDFrase = '"+IDF+"'", null); + Integer ret = query.getCount(); //There is integer because getCount is + query.close(); + return ret; + }catch(Exception e){ + Log.e("Database",e.toString()); + return 0; //If error, better return not fav + } + } /** Add a sentence as favorite */ - public void addFav(int IDF){ + void addFav(int IDF){ SQLiteDatabase db = this.getWritableDatabase(); try{ db.execSQL("INSERT INTO frasesFav VALUES('"+IDF+"')"); @@ -77,7 +90,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { } /** Del a favorite sentence */ - public void delFav(int IDF){ + void delFav(int IDF){ SQLiteDatabase db = this.getWritableDatabase(); try{ db.execSQL("DELETE FROM frasesFav WHERE IDFrase='"+IDF+"'"); @@ -87,7 +100,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { } /** Returns ID from a day X sentence, if possible */ - public Integer getIDFraseDay(int year,int month,int dayOfMonth){ + Integer getIDFraseDay(int year,int month,int dayOfMonth){ Calendar cal = Calendar.getInstance(); try { Integer ret; @@ -143,14 +156,14 @@ public class DatabaseHelper extends SQLiteOpenHelper { } /** Returns ID of today's sentence */ - public Integer getIDFraseHoy(){ + Integer getIDFraseHoy(){ Calendar cal = Calendar.getInstance(); //Month + 1 because Android starts with month=0 return getIDFraseDay(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH)+1,cal.get(Calendar.DAY_OF_MONTH)); } /** Returns an array of favorite IDs */ - public Integer[] getIDFavs(){ + Integer[] getIDFavs(){ SQLiteDatabase db = this.getWritableDatabase(); List a = new ArrayList<>(); @@ -167,7 +180,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { } /** Returns an array of favorite IDs */ - public String[] getAllDaysYet(){ + String[] getAllDaysYet(){ SQLiteDatabase db = this.getWritableDatabase(); List a = new ArrayList<>(); diff --git a/app/src/main/java/com/jkanetwork/st/calendariodefrases/FirstStartActivity.java b/app/src/main/java/com/jkanetwork/st/calendariodefrases/FirstStartActivity.java deleted file mode 100644 index 22b1343..0000000 --- a/app/src/main/java/com/jkanetwork/st/calendariodefrases/FirstStartActivity.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.jkanetwork.st.calendariodefrases; - -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.view.View; - -/** - * Created by kprkpr on 24/03/17. - */ - -public class FirstStartActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_first); - Config conf = new Config(this); - conf.setFirstTime(false); /* App opened at least one time */ - - (findViewById(R.id.btnStart)).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent newMA= new Intent(FirstStartActivity.this,MainActivity.class); - startActivity(newMA); - } - }); - } - -} diff --git a/app/src/main/java/com/jkanetwork/st/calendariodefrases/MainActivity.java b/app/src/main/java/com/jkanetwork/st/calendariodefrases/MainActivity.java index c83b3aa..5d6dbc1 100644 --- a/app/src/main/java/com/jkanetwork/st/calendariodefrases/MainActivity.java +++ b/app/src/main/java/com/jkanetwork/st/calendariodefrases/MainActivity.java @@ -1,8 +1,10 @@ package com.jkanetwork.st.calendariodefrases; +import android.app.AlertDialog; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; @@ -11,17 +13,19 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; +import com.marcohc.robotocalendar.RobotoCalendarView.RobotoCalendarListener; +import com.marcohc.robotocalendar.RobotoCalendarView; +import java.text.DateFormatSymbols; +import java.util.Calendar; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.MobileAds; -import com.marcohc.robotocalendar.RobotoCalendarView.RobotoCalendarListener; -import com.marcohc.robotocalendar.RobotoCalendarView; -import java.text.DateFormatSymbols; -import java.util.Calendar; public class MainActivity extends AppCompatActivity implements RobotoCalendarListener { @@ -40,6 +44,9 @@ public class MainActivity extends AppCompatActivity implements RobotoCalendarLis TextView txtfraseTitle; TextView txtfraseText; TextView txtfraseAutor; + /* More objects of view */ + ImageButton btnFav; + ImageButton btnShare; @Override @@ -77,14 +84,25 @@ public class MainActivity extends AppCompatActivity implements RobotoCalendarLis /* First of all,before loading, see if its the first time using the app */ if (conf.getFirstTime()){ - Intent newFA= new Intent(MainActivity.this,FirstStartActivity.class); - startActivity(newFA); + new AlertDialog.Builder(MainActivity.this) + .setTitle("Bienvenido") + .setMessage("Bienvenidos a Calendario de Frases, donde cada día disfrutarás de una nueva cita celebre o de un nuevo refrán que podrás guardar o compartir con tus amigos.\nAdemás, podrás poner una notificación para que te avise de la frase del día a la hora que quieras, por ejemplo, al desperarte.\nRecuerda que no puedes ver frases de los días que no hayan pasado aún con la aplicación.\nEsperamos que la disfrutes.") + .setCancelable(false) + .setPositiveButton("Empecemos", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Nothing + } + }).show(); + conf.setFirstTime(false); //Only show first time } setContentView(R.layout.activity_main); - txtfraseTitle = (TextView) findViewById(R.id.txt_frasetitle); - txtfraseText = (TextView) findViewById(R.id.txt_frasetext); - txtfraseAutor = (TextView) findViewById(R.id.txt_fraseautor); + txtfraseTitle = findViewById(R.id.txt_frasetitle); + txtfraseText = findViewById(R.id.txt_frasetext); + txtfraseAutor = findViewById(R.id.txt_fraseautor); + btnFav = findViewById(R.id.btnFav); + btnShare = findViewById(R.id.btnShare); /* Calendar basic settings */ robotoCalendarView = (RobotoCalendarView) findViewById(R.id.calendarPicker); @@ -96,9 +114,8 @@ public class MainActivity extends AppCompatActivity implements RobotoCalendarLis MobileAds.initialize(getApplicationContext(), MainActivity.this.getString(R.string.admob_launch_api)); AdView mAdView = (AdView) findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); - mAdView.loadAd(adRequest); + mAdView.loadAd(adRequest); //request a new ad - onResume(); /* Here all that as to be refreshed when app opens from background */ /* Configure alarm */ @@ -138,6 +155,39 @@ public class MainActivity extends AppCompatActivity implements RobotoCalendarLis Toast.makeText(getApplicationContext(), "Copiado al portapapeles", Toast.LENGTH_LONG ).show(); } }); + changeFavImage(); //Fav image button + + // SetFavListener + btnFav.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View viewIn) { + if (db.getFav(IDFrase) == 1){ + db.delFav(IDFrase); + }else { + db.addFav(IDFrase); + } + changeFavImage(); + } + }); + // ShareListener + btnShare.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View viewIn) { + String sentence = txtfraseText.getText().toString(); + Intent intent = new Intent(Intent.ACTION_SEND); + intent.setType("text/plain"); + intent.putExtra(Intent.EXTRA_TEXT, sentence+MainActivity.this.getString(R.string.sharefrom)); + startActivity(Intent.createChooser(intent, "Compartir con")); + } + }); + } + + private void changeFavImage() { + if (db.getFav(IDFrase) == 1){ + btnFav.setBackgroundResource(R.drawable.star_on); + }else { + btnFav.setBackgroundResource(R.drawable.star_off); + } } @@ -149,37 +199,6 @@ public class MainActivity extends AppCompatActivity implements RobotoCalendarLis } - @Override - public void onCreateContextMenu(ContextMenu menu, View v, - ContextMenu.ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, v, menuInfo); - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.proverbmenu_add, menu); - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - TextView txtfraseText = (TextView) findViewById(R.id.txt_frasetext); - String sentence = txtfraseText.getText().toString(); - switch (item.getItemId()) { - case R.id.copy: - ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); - clipboard.setPrimaryClip(ClipData.newPlainText("Sentence", sentence+MainActivity.this.getString(R.string.sharefrom))); - Toast.makeText(getApplicationContext(), "Copiado al portapapeles", Toast.LENGTH_LONG ).show(); - return true; - case R.id.addfav: - db.addFav(IDFrase); - return true; - case R.id.share: - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, sentence+MainActivity.this.getString(R.string.sharefrom)); - startActivity(Intent.createChooser(intent, "Compartir con")); - return true; - } - return false; - } - @Override public void onDayClick(Calendar daySelectedCalendar) { @@ -198,8 +217,13 @@ public class MainActivity extends AppCompatActivity implements RobotoCalendarLis }else { txtfraseTitle.setText(R.string.txt_todaysentence); //Change title (today) } - //markDates(); TODO El programa borra el día seleccionado al hacerlo + changeFavImage(); //For checking fav image } + @Override + public void onDayLongClick(Calendar daySelectedCalendar) { + onDayClick(daySelectedCalendar); + } + /** It returns the month name */ public String getMonth(int month) { @@ -207,11 +231,6 @@ public class MainActivity extends AppCompatActivity implements RobotoCalendarLis return str.substring(0, 1).toUpperCase() + str.substring(1); } - @Override - public void onDayLongClick(Calendar daySelectedCalendar) { - onDayClick(daySelectedCalendar); - } - public void markDates() { robotoCalendarView.clearCalendar(); @@ -219,20 +238,19 @@ public class MainActivity extends AppCompatActivity implements RobotoCalendarLis String[] IDDays = db.getAllDaysYet(); if (IDDays.length != 0) { for (int x = 0; x <= IDDays.length - 1; x++) { - //Log.d("Date", "String: " + String.valueOf(IDDays[x])); Integer year = Integer.parseInt(IDDays[x].substring(0, 4)); Integer month = Integer.parseInt(IDDays[x].substring(4, 6)); Integer day = Integer.parseInt(IDDays[x].substring(6, 8)); if (year.equals(calYear) && month.equals(calMonth)) { time.set(Calendar.DAY_OF_MONTH, day); time.set(Calendar.MONTH, month-1); - //Log.d("Date", "Marking: " + day); robotoCalendarView.markCircleImage1(time); } } } } + /* Overrides for month plus and minus */ @Override public void onRightButtonClick() { @@ -253,4 +271,5 @@ public class MainActivity extends AppCompatActivity implements RobotoCalendarLis } markDates(); } + } \ No newline at end of file diff --git a/app/src/main/java/com/jkanetwork/st/calendariodefrases/NotificationHelper.java b/app/src/main/java/com/jkanetwork/st/calendariodefrases/NotificationHelper.java index 859beb4..b042c79 100644 --- a/app/src/main/java/com/jkanetwork/st/calendariodefrases/NotificationHelper.java +++ b/app/src/main/java/com/jkanetwork/st/calendariodefrases/NotificationHelper.java @@ -9,7 +9,7 @@ import android.app.Service; import android.content.Intent; import android.graphics.BitmapFactory; import android.os.IBinder; -import android.support.v7.app.NotificationCompat; +import android.support.v4.app.NotificationCompat; import android.util.Log; @@ -48,7 +48,7 @@ public class NotificationHelper extends Service { CharSequence ticker = "Frase del día"; CharSequence contentTitle = "Frase de hoy:"; CharSequence contentText = db.getFraseFromID(db.getIDFraseHoy()); - NotificationCompat.Builder notibuilder = (android.support.v7.app.NotificationCompat.Builder) new NotificationCompat.Builder(NotificationHelper.this) + NotificationCompat.Builder notibuilder = new NotificationCompat.Builder(NotificationHelper.this,"notif") .setContentIntent(notifIntent) .setTicker(ticker) .setContentTitle(contentTitle) diff --git a/app/src/main/java/com/jkanetwork/st/calendariodefrases/OptsActivity.java b/app/src/main/java/com/jkanetwork/st/calendariodefrases/OptsActivity.java index cd8a9fa..42b8dec 100644 --- a/app/src/main/java/com/jkanetwork/st/calendariodefrases/OptsActivity.java +++ b/app/src/main/java/com/jkanetwork/st/calendariodefrases/OptsActivity.java @@ -114,10 +114,10 @@ public class OptsActivity extends AppCompatActivity { } public void setEnabledParts(){ /* I have to set vars again because is out of onCreate */ - Spinner notifHour = (Spinner) findViewById(R.id.spinnerHour); - Spinner notifMinute = (Spinner) findViewById(R.id.spinnerMinute); - CheckBox chkalarm = (CheckBox) findViewById(R.id.chk_alarm); - CheckBox chkpersistent = (CheckBox) findViewById(R.id.chk_persistent); + Spinner notifHour = findViewById(R.id.spinnerHour); + Spinner notifMinute = findViewById(R.id.spinnerMinute); + CheckBox chkalarm = findViewById(R.id.chk_alarm); + CheckBox chkpersistent = findViewById(R.id.chk_persistent); if (chkalarm.isChecked()){ chkpersistent.setEnabled(true); /* This other checks is chkpersistent checked dependent */ diff --git a/app/src/main/res/drawable/fondo_opts.png b/app/src/main/res/drawable/fondo_opts.png index 5940e6e..279b42a 100644 Binary files a/app/src/main/res/drawable/fondo_opts.png and b/app/src/main/res/drawable/fondo_opts.png differ diff --git a/app/src/main/res/drawable/star_off.png b/app/src/main/res/drawable/star_off.png new file mode 100644 index 0000000..1bccbf3 Binary files /dev/null and b/app/src/main/res/drawable/star_off.png differ diff --git a/app/src/main/res/drawable/star_on.png b/app/src/main/res/drawable/star_on.png new file mode 100644 index 0000000..3a7dc0c Binary files /dev/null and b/app/src/main/res/drawable/star_on.png differ diff --git a/app/src/main/res/layout/activity_first.xml b/app/src/main/res/layout/activity_first.xml deleted file mode 100644 index 70057e0..0000000 --- a/app/src/main/res/layout/activity_first.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - -