diff --git a/.gitignore b/.gitignore index 2eb905c..2b75303 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,13 @@ +*.iml .gradle /local.properties -/.idea/* +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml .DS_Store /build /captures -*.iml +.externalNativeBuild diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index b5ac966..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -SwahiliBox \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 96cc43e..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3..0000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..15a15b2 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 0833b17..2996d53 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,16 +3,12 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index 1a3eaff..37a7509 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,43 +1,6 @@ - - - - - - - - - - - - - - - - - - + diff --git a/.idea/modules.xml b/.idea/modules.xml index 3858b6e..c00ae32 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,8 @@ - + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 53a22c3..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# AndroidApp -SwahiliBox Official Android App diff --git a/SwahiliBox.iml b/SwahiliBox.iml deleted file mode 100644 index 15743c1..0000000 --- a/SwahiliBox.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/app.iml b/app/app.iml index 4e20163..140f1c2 100644 --- a/app/app.iml +++ b/app/app.iml @@ -1,5 +1,5 @@ - + @@ -9,93 +9,206 @@ - - - + + + - - + + - + + - - + + - + + - + + + + + + + + + + + + + + + - + + + + + + + + - - - - - + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 14c002a..b700f79 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,32 +1,67 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 22 - buildToolsVersion "23.0.1" - + compileSdkVersion 28 defaultConfig { - applicationId "ke.co.swahilibox.swahilibox" - minSdkVersion 9 - targetSdkVersion 22 + applicationId "com.sam.swahilibox" + minSdkVersion 21 + targetSdkVersion 28 versionCode 1 versionName "1.0" - multiDexEnabled true + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } buildTypes { release { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:22.2.1' - compile 'com.android.support:design:22.2.0' - compile 'com.parse.bolts:bolts-android:1.+' - compile fileTree(dir: 'libs', include: 'Parse-*.jar') - compile 'com.jakewharton:butterknife:6.1.0' - compile 'com.flaviofaria:kenburnsview:1.0.6' + def lifecycle_version = "1.1.1" + implementation fileTree(include: ['*.jar'], dir: 'libs') + //noinspection GradleCompatible + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.android.support:support-v13:28.0.0' + implementation 'android.arch.lifecycle:extensions:1.1.1' + implementation 'com.flaviofaria:kenburnsview:1.0.6' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + // ViewModel and LiveData + implementation "android.arch.lifecycle:extensions:$lifecycle_version" + //room + implementation 'android.arch.persistence.room:runtime:1.1.1' + annotationProcessor 'android.arch.persistence.room:compiler:1.1.1' + implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'com.android.support:recyclerview-v7:28.0.0' + + implementation 'com.android.support:support-compat:28.0.0' + implementation 'com.android.support:design:28.0.0' + + // Preferences Dependencies + implementation 'com.android.support:preference-v7:28.0.0' + + // Firebase dependency + implementation 'com.google.firebase:firebase-messaging:17.6.0' + + //firebase + implementation 'com.google.firebase:firebase-core:16.0.8' + implementation 'com.google.gms:google-services:4.2.0' + implementation 'com.evernote:android-job:1.1.8' + implementation 'com.firebase:firebase-jobdispatcher:0.5.2' + + + //auths + + implementation 'com.google.android.gms:play-services-auth:16.0.1' + implementation 'com.google.firebase:firebase-auth:16.2.1' + // Add the Facebook SDK + implementation 'com.facebook.android:facebook-android-sdk:4.20.0' + implementation 'com.github.geniushkg:oauthLibGithub:1.0.2' + implementation 'com.android.support.constraint:constraint-layout:2.0.0-alpha4' } +apply plugin: 'com.google.gms.google-services' diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..7e03ed8 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,48 @@ +{ + "project_info": { + "project_number": "209445683946", + "firebase_url": "https://swahilibox-14e22.firebaseio.com", + "project_id": "swahilibox-14e22", + "storage_bucket": "swahilibox-14e22.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:209445683946:android:edca66d9a5cd5036", + "android_client_info": { + "package_name": "com.sam.swahilibox" + } + }, + "oauth_client": [ + { + "client_id": "209445683946-9elarf8jkuslcb8lhes36dnhm7k18iue.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sam.swahilibox", + "certificate_hash": "076cd1aa8cd77bd5b26ca5bcba1bc318adaec999" + } + }, + { + "client_id": "209445683946-fcivn0hgdnkgqg3n5saemfi3jl8nfc0r.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAfXcJwhflXh3axQ79BOUFMeCy0bifrGvM" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "209445683946-fcivn0hgdnkgqg3n5saemfi3jl8nfc0r.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/libs/Parse-1.9.1.jar b/app/libs/Parse-1.9.1.jar deleted file mode 100644 index c121c8d..0000000 Binary files a/app/libs/Parse-1.9.1.jar and /dev/null differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 4ab1947..f1b4245 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,17 +1,21 @@ # Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /home/japheth/Android/Sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html -# Add any project specific keep options here: - # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/com/sam/swahilibox/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/sam/swahilibox/ExampleInstrumentedTest.java new file mode 100644 index 0000000..9cf3ba8 --- /dev/null +++ b/app/src/androidTest/java/com/sam/swahilibox/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.sam.swahilibox; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.sam.swahilibox", appContext.getPackageName()); + } +} diff --git a/app/src/androidTest/java/ke/co/swahilibox/swahilibox/ApplicationTest.java b/app/src/androidTest/java/ke/co/swahilibox/swahilibox/ApplicationTest.java deleted file mode 100644 index 80d2704..0000000 --- a/app/src/androidTest/java/ke/co/swahilibox/swahilibox/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package ke.co.swahilibox.swahilibox; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f0965de..a4ecd64 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,86 +1,68 @@ + package="com.sam.swahilibox"> - - - - - - - - - - - - - - + + - + android:name=".AboutUs" + android:label="@string/title_activity_about_us" + android:theme="@style/AppTheme"/> - - - - - - + android:name=".Alerts" + android:label="@string/title_activity_message" + android:theme="@style/AppTheme.NoActionBar"> + + - - - - - + - - + + - - - - + + + + + + - + + - + + android:name="com.facebook.CustomTabActivity" + android:exported="true"> + + + + + + + + - + \ No newline at end of file diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/AboutUs.java b/app/src/main/java/com/sam/swahilibox/AboutUs.java similarity index 96% rename from app/src/main/java/ke/co/swahilibox/swahilibox/AboutUs.java rename to app/src/main/java/com/sam/swahilibox/AboutUs.java index f826434..f48a3a8 100644 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/AboutUs.java +++ b/app/src/main/java/com/sam/swahilibox/AboutUs.java @@ -1,4 +1,4 @@ -package ke.co.swahilibox.swahilibox; +package com.sam.swahilibox; import android.app.ProgressDialog; import android.graphics.Bitmap; @@ -9,10 +9,11 @@ import android.webkit.WebViewClient; import android.widget.ProgressBar; + public class AboutUs extends AppCompatActivity { private String url; - private android.webkit.WebView webView; + private WebView webView; private ProgressBar progressBar; @Override diff --git a/app/src/main/java/com/sam/swahilibox/Alerts.java b/app/src/main/java/com/sam/swahilibox/Alerts.java new file mode 100644 index 0000000..19bd7e4 --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/Alerts.java @@ -0,0 +1,177 @@ +package com.sam.swahilibox; + +import android.arch.lifecycle.Observer; +import android.arch.lifecycle.ViewModelProviders; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.support.v4.view.GravityCompat; +import android.support.v7.app.ActionBarDrawerToggle; +import android.view.MenuItem; +import android.support.design.widget.NavigationView; +import android.support.v4.widget.DrawerLayout; + +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.widget.Toast; + +import com.google.firebase.messaging.FirebaseMessaging; +import com.sam.swahilibox.adapters.NotificationAdapter; +import com.sam.swahilibox.model.Notification; +import com.sam.swahilibox.viewmodels.NotificationViewModel; + +import java.util.List; + +public class Alerts extends AppCompatActivity + implements NavigationView.OnNavigationItemSelectedListener { + + private NotificationViewModel notificationViewModel; + private RecyclerView rv_notification_message; + private Intent intent; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_alerts); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + DrawerLayout drawer = findViewById(R.id.drawer_layout); + NavigationView navigationView = findViewById(R.id.nav_view); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawer.addDrawerListener(toggle); + toggle.syncState(); + navigationView.setNavigationItemSelectedListener(this); + + rv_notification_message = findViewById(R.id.rv_notification_messages); + rv_notification_message.setLayoutManager(new LinearLayoutManager(this)); + rv_notification_message.setHasFixedSize(true); + + rv_notification_message = findViewById(R.id.rv_notification_messages); + rv_notification_message.setLayoutManager(new LinearLayoutManager(this)); + rv_notification_message.setHasFixedSize(true); + + final NotificationAdapter notificationAdapter = new NotificationAdapter(); + rv_notification_message.setAdapter(notificationAdapter); + + notificationViewModel = ViewModelProviders.of(this).get(NotificationViewModel.class); + notificationViewModel.getAllNotes().observe(this,(new Observer>() { + @Override + public void onChanged(List notifications) { + //update recyclerview + notificationAdapter.submitList(notifications); + } + })); + subscribeToFcmDealsTopic(); + + //swipe to delete a notification message + new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return 0; + } + + @Override + public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) { + return false; + } + + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + + notificationViewModel.delete(notificationAdapter.getNotificationMessageAt(viewHolder.getAdapterPosition())); + + } + }).attachToRecyclerView(rv_notification_message); + + } + + + + //subscribes to firebase cloud messaging topic one time + private void subscribeToFcmDealsTopic(){ + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + if (!prefs.getBoolean("firstRun", false)) { + + FirebaseMessaging.getInstance().subscribeToTopic("notifications"); + + SharedPreferences.Editor editor = prefs.edit(); + editor.putBoolean("firstRun", true); + editor.commit(); + } + } + + @Override + public void onBackPressed() { + DrawerLayout drawer = findViewById(R.id.drawer_layout); + if (drawer.isDrawerOpen(GravityCompat.START)) { + drawer.closeDrawer(GravityCompat.START); + } else { + super.onBackPressed(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.alerts, menu); + getMenuInflater().inflate(R.menu.menu_item,menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + if (id == R.id.delete_all_messages){ + notificationViewModel.deleteAll(); + Toast.makeText(this, "All Notes Deleted", Toast.LENGTH_SHORT).show(); + } + + return super.onOptionsItemSelected(item); + } + + @SuppressWarnings("StatementWithEmptyBody") + @Override + public boolean onNavigationItemSelected(MenuItem item) { + // Handle navigation view item clicks here. + int id = item.getItemId(); + + if (id == R.id.log_out) { + intent = new Intent(this, LogIn.class); + startActivity(intent); + + finish(); + } else if (id == R.id.about_us) { + intent = new Intent(this, AboutUs.class); + startActivity(intent); + Toast.makeText(this, "Loading...", Toast.LENGTH_LONG).show(); + + } else if (id == R.id.invite) { + intent = new Intent(Intent.ACTION_SEND); + intent.setType("text/plain"); + intent.putExtra(Intent.EXTRA_TEXT, "Hello, you are invited to join SwahiliBox. " + + "Check our website http://www.swahilibox.co.ke and download the " + + "SwahiliBox App to stay upto date"); + startActivity(intent); + + } + + DrawerLayout drawer = findViewById(R.id.drawer_layout); + drawer.closeDrawer(GravityCompat.START); + return true; + } +} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/AppConfig.java b/app/src/main/java/com/sam/swahilibox/AppConfig.java similarity index 92% rename from app/src/main/java/ke/co/swahilibox/swahilibox/AppConfig.java rename to app/src/main/java/com/sam/swahilibox/AppConfig.java index 964f568..a051f3d 100644 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/AppConfig.java +++ b/app/src/main/java/com/sam/swahilibox/AppConfig.java @@ -1,4 +1,4 @@ -package ke.co.swahilibox.swahilibox; +package com.sam.swahilibox; /** * Created by japheth on 11/15/15. diff --git a/app/src/main/java/com/sam/swahilibox/LogIn.java b/app/src/main/java/com/sam/swahilibox/LogIn.java new file mode 100644 index 0000000..d122529 --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/LogIn.java @@ -0,0 +1,146 @@ +package com.sam.swahilibox; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.View; + +import com.facebook.CallbackManager; +import com.facebook.FacebookCallback; +import com.facebook.FacebookException; +import com.facebook.login.LoginManager; +import com.facebook.login.LoginResult; +import com.google.android.gms.auth.api.signin.GoogleSignIn; +import com.google.android.gms.auth.api.signin.GoogleSignInAccount; +import com.google.android.gms.auth.api.signin.GoogleSignInClient; +import com.google.android.gms.auth.api.signin.GoogleSignInOptions; +import com.google.android.gms.common.SignInButton; +import com.google.android.gms.common.api.ApiException; +import com.google.android.gms.tasks.Task; + +public class LogIn extends AppCompatActivity implements View.OnClickListener { + + SignInButton signInButton; + private static final int RC_SIGN_IN = 1; + private static final String TAG = "LogIn"; + private CallbackManager callbackManager; + + private GoogleSignInClient googleSignInClient; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_log_in); + signInButton = findViewById(R.id.sign_in_button); + //st size to standard + signInButton.setSize(signInButton.SIZE_STANDARD); + /*// Configure sign-in to request the user's ID, email address, and basic + // profile. ID and basic profile are included in DEFAULT_SIGN_IN.*/ + + GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestEmail() + .build(); + + // Build a GoogleSignInClient with the options specified by gso. + googleSignInClient = GoogleSignIn.getClient(this, gso); + + signInButton.setOnClickListener(this); + + //facebook + // Initialize your instance of callbackManager// + callbackManager = CallbackManager.Factory.create(); + // Register your callback// + LoginManager.getInstance().registerCallback(callbackManager, + + // If the login attempt is successful, then call onSuccess and pass the LoginResult// + new FacebookCallback() { + @Override + public void onSuccess(LoginResult loginResult) { + + startActivity(new Intent(LogIn.this, Alerts.class)); + // Print the user’s ID and the Auth Token to Android Studio’s Logcat Monitor// + + Log.d(TAG, "User ID: " + + loginResult.getAccessToken().getUserId() + "\n" + + "Auth Token: " + loginResult.getAccessToken().getToken()); + } + + // If the user cancels the login, then call onCancel// + @Override + public void onCancel() { + //return to the same activity + finish(); + } + + // If an error occurs, then call onError// + @Override + public void onError(FacebookException exception) { + Log.e(TAG, "The error occurred at "+exception); + } + }); + } + private void signIn(){ + Intent signInIntent = googleSignInClient.getSignInIntent(); + startActivityForResult(signInIntent,RC_SIGN_IN); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == RC_SIGN_IN){ +// The task return from this intent is always completed + Task task = + GoogleSignIn.getSignedInAccountFromIntent(data); + handleSignInEvent(task); + } + } + + private void handleSignInEvent(Task task) { + + try { + GoogleSignInAccount account = task.getResult(ApiException.class); + + //show progress dialog + final ProgressDialog progressDialog = new ProgressDialog(LogIn.this); + progressDialog.setIndeterminate(true); + progressDialog.setMessage("Logging you in..."); + progressDialog.show(); + + // Signed in successfully, show authenticated UI. + Intent intent = new Intent(LogIn.this, Alerts.class); + startActivity(intent); + updateUI(account); + + progressDialog.dismiss(); + + } catch (ApiException e) { + // The ApiException status code indicates the detailed failure reason. + // Please refer to the GoogleSignInStatusCodes class reference for more information. + Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); + updateUI(null); + } + } + + private void updateUI(GoogleSignInAccount account) { + if(account == null){ + signInButton.setEnabled(true); + }else{ + signInButton.setEnabled(true); + //startActivity(new Intent(MainActivity.this,StuffActivity.class)); + + } + + } + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.sign_in_button: + signIn(); + break; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/helper/PrefManager.java b/app/src/main/java/com/sam/swahilibox/PrefManager.java similarity index 96% rename from app/src/main/java/ke/co/swahilibox/swahilibox/helper/PrefManager.java rename to app/src/main/java/com/sam/swahilibox/PrefManager.java index 5f2d853..0410ba3 100644 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/helper/PrefManager.java +++ b/app/src/main/java/com/sam/swahilibox/PrefManager.java @@ -1,4 +1,4 @@ -package ke.co.swahilibox.swahilibox.helper; +package com.sam.swahilibox; import android.content.Context; import android.content.SharedPreferences; diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/Splash.java b/app/src/main/java/com/sam/swahilibox/Splash.java similarity index 78% rename from app/src/main/java/ke/co/swahilibox/swahilibox/Splash.java rename to app/src/main/java/com/sam/swahilibox/Splash.java index 0ee0d37..551ed4c 100644 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/Splash.java +++ b/app/src/main/java/com/sam/swahilibox/Splash.java @@ -1,11 +1,9 @@ -package ke.co.swahilibox.swahilibox; +package com.sam.swahilibox; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; -import ke.co.swahilibox.swahilibox.helper.PrefManager; - public class Splash extends AppCompatActivity { @@ -15,7 +13,7 @@ protected void onCreate(Bundle savedInstanceState) { PrefManager manager = new PrefManager(this); if (manager.isLoggedIn()) { - Intent intent = new Intent(Splash.this, Main.class); + Intent intent = new Intent(Splash.this, Alerts.class); startActivity(intent); finish(); } else { diff --git a/app/src/main/java/com/sam/swahilibox/adapters/NotificationAdapter.java b/app/src/main/java/com/sam/swahilibox/adapters/NotificationAdapter.java new file mode 100644 index 0000000..1517f00 --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/adapters/NotificationAdapter.java @@ -0,0 +1,88 @@ +package com.sam.swahilibox.adapters; + +import android.support.annotation.NonNull; +import android.support.v7.recyclerview.extensions.ListAdapter; +import android.support.v7.util.DiffUtil; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.sam.swahilibox.R; +import com.sam.swahilibox.model.Notification; + +public class NotificationAdapter extends ListAdapter { + private OnItemclicklistener onItemclicklistener; + + public NotificationAdapter() { + super(DIFF_CALLBACK); + } + + //more efficient than notifyDatasetChanged + private static final DiffUtil.ItemCallback DIFF_CALLBACK = new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(@NonNull Notification notification, @NonNull Notification t1) { + return notification.getId() == t1.getId(); + } + + @Override + public boolean areContentsTheSame(@NonNull Notification notification, @NonNull Notification t1) { + return notification.getTitle().equals(t1.getTitle())&& + notification.getMessage().equals(t1.getMessage())&& + notification.getDate().equals(t1.getDate()); + } + }; + + @NonNull + @Override + public NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.notify_item, parent, false); + + return new NoteHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull NoteHolder holder, int position) { + Notification notification = getItem(position); + holder.tv_title.setText(notification.getTitle()); + holder.tv_date.setText(String.valueOf(notification.getDate())); + holder.tv_message.setText(notification.getMessage()); + } + + + public Notification getNotificationMessageAt(int position) { + return getItem(position); + } + + class NoteHolder extends RecyclerView.ViewHolder { + private TextView tv_title; + private TextView tv_date; + private TextView tv_message; + + public NoteHolder(@NonNull View itemView) { + super(itemView); + tv_title = itemView.findViewById(R.id.tv_title); + tv_message = itemView.findViewById(R.id.tv_message); + tv_date = itemView.findViewById(R.id.tv_date); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int position = getAdapterPosition(); + if (onItemclicklistener != null && position != RecyclerView.NO_POSITION) { + onItemclicklistener.onItemClick(getItem(position)); + } + } + }); + } + } + public interface OnItemclicklistener { + void onItemClick(Notification notification); + } + //future objectives app version2.0 + public void setOnItemclicklistener(OnItemclicklistener onItemclicklistener) { + this.onItemclicklistener = onItemclicklistener; + } +} + diff --git a/app/src/main/java/com/sam/swahilibox/fcm/FirebaseInstanceIdService.java b/app/src/main/java/com/sam/swahilibox/fcm/FirebaseInstanceIdService.java new file mode 100644 index 0000000..1b4604d --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/fcm/FirebaseInstanceIdService.java @@ -0,0 +1,21 @@ +package com.sam.swahilibox.fcm; + +import android.util.Log; + +import com.google.firebase.iid.FirebaseInstanceId; + +public class FirebaseInstanceIdService extends com.google.firebase.iid.FirebaseInstanceIdService { + + private static final String TAG = "FirebaseInstanceIdServi"; + + @Override + public void onTokenRefresh() { + + + String refreshToken = FirebaseInstanceId.getInstance().getToken(); + + //creates a log that will enable us to get a token + Log.d(TAG,"Our token is: "+refreshToken); + + } +} diff --git a/app/src/main/java/com/sam/swahilibox/fcm/FirebaseMessageService.java b/app/src/main/java/com/sam/swahilibox/fcm/FirebaseMessageService.java new file mode 100644 index 0000000..ab1b72e --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/fcm/FirebaseMessageService.java @@ -0,0 +1,78 @@ +package com.sam.swahilibox.fcm; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; + +import android.os.Bundle; +import android.support.v4.app.NotificationCompat; +import android.util.Log; + +import com.firebase.jobdispatcher.FirebaseJobDispatcher; +import com.firebase.jobdispatcher.GooglePlayDriver; +import com.firebase.jobdispatcher.Job; +import com.google.firebase.messaging.FirebaseMessagingService; +import com.google.firebase.messaging.RemoteMessage; +import com.sam.swahilibox.Alerts; +import com.sam.swahilibox.R; + + +import java.util.Map; + +public class FirebaseMessageService extends FirebaseMessagingService { + private static final String TAG = "FirebaseMessageService"; + + + + @Override + public void onMessageReceived(RemoteMessage remoteMessage) { + super.onMessageReceived(remoteMessage); + Log.d(TAG, "Received message " + remoteMessage.getFrom()); + + if (remoteMessage.getData().size() > 0) { + Log.d(TAG, "Message data " + remoteMessage.getData()); + scheduleJob(remoteMessage.getData()); + } + if (remoteMessage.getNotification() != null) { + Log.d(TAG, "Message Notification " + + remoteMessage.getNotification().getBody()); + sendNotification(remoteMessage.getNotification()); + } + } + private void scheduleJob(Map data) { + Bundle bundle = new Bundle(); + for (Map.Entry entry : data.entrySet()) { + bundle.putString(entry.getKey(), entry.getValue()); + } + + FirebaseJobDispatcher dispatcher = + new FirebaseJobDispatcher(new GooglePlayDriver(this)); + Job myJob = dispatcher.newJobBuilder() + .setService(NotificationJobService.class) + .setTag("notifications") + .setExtras(bundle) + .build(); + dispatcher.schedule(myJob); + } + + private void sendNotification(RemoteMessage.Notification notification) { + Intent intent = new Intent(this, Alerts.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, + PendingIntent.FLAG_ONE_SHOT); + + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(this, "fcm-channel") + .setSmallIcon(R.drawable.swahilibox_splash) + .setContentTitle(notification.getTitle()) + .setContentText(notification.getBody()) + .setAutoCancel(true) + .setContentIntent(pendingIntent); + + NotificationManager notificationManager = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + + notificationManager.notify(0, notificationBuilder.build()); + } +} diff --git a/app/src/main/java/com/sam/swahilibox/fcm/NotificationJobService.java b/app/src/main/java/com/sam/swahilibox/fcm/NotificationJobService.java new file mode 100644 index 0000000..c65c309 --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/fcm/NotificationJobService.java @@ -0,0 +1,57 @@ +package com.sam.swahilibox.fcm; + +import android.os.Bundle; +import android.util.Log; + +import com.firebase.jobdispatcher.JobParameters; +import com.firebase.jobdispatcher.JobService; +import com.sam.swahilibox.model.Notification; +import com.sam.swahilibox.model.NotificationDao; +import com.sam.swahilibox.repositories.NotificationRepository; + +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +public class NotificationJobService extends JobService { + private static final String TAG = "NotificationJobService"; + private final Executor executor = Executors.newFixedThreadPool(2); + private NotificationDao notificationDao = NotificationRepository.getNotificationDatabase(this).notificationDao(); + + @Override + public boolean onStartJob(JobParameters job) { + Log.d(TAG, "updating ROOM database with latest data"); + + addNotificationDataToSQLiteDatabase(job.getExtras()); + return false; + } + + @Override + public boolean onStopJob(JobParameters job) { + return false; + } + + //add data to sqlite database using room + //should be done on seperate thread + private void addNotificationDataToSQLiteDatabase(Bundle bundle) { + + final Notification notification = getNotificationObjectFromBundle(bundle); + executor.execute(new Runnable() { + @Override + public void run() { + long rec = notificationDao.insert(notification); + Log.d(TAG, "added record to db " + rec); + } + }); + + } + + private Notification getNotificationObjectFromBundle(Bundle bundle) { + Notification notification1 = new Notification(); + notification1.setTitle(bundle.getString("title")); + notification1.setMessage(bundle.getString("message")); + notification1.setDate(bundle.getString("date")); + + return notification1; + + } +} diff --git a/app/src/main/java/com/sam/swahilibox/model/Notification.java b/app/src/main/java/com/sam/swahilibox/model/Notification.java new file mode 100644 index 0000000..03665d2 --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/model/Notification.java @@ -0,0 +1,59 @@ +package com.sam.swahilibox.model; + +import android.arch.persistence.room.Entity; +import android.arch.persistence.room.PrimaryKey; + +@Entity(tableName = "table_notification") +public class Notification { + + @PrimaryKey(autoGenerate = true) + private int id; + + private String title; + + private String message; + + private String date; + + public Notification(String title, String message,String date) { + this.title = title; + this.message = message; + this.date = date; + } + + public Notification() { + } + + public void setTitle(String title) { + this.title = title; + } + + public void setMessage(String message) { + this.message = message; + } + + public void setDate(String date) { + this.date = date; + } + + public void setId(int id) { + this.id = id; + } + + public int getId() { + return id; + } + + public String getTitle() { + return title; + } + + public String getMessage() { + return message; + } + + public String getDate() { + return date; + } +} + diff --git a/app/src/main/java/com/sam/swahilibox/model/NotificationDao.java b/app/src/main/java/com/sam/swahilibox/model/NotificationDao.java new file mode 100644 index 0000000..330136d --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/model/NotificationDao.java @@ -0,0 +1,29 @@ +package com.sam.swahilibox.model; + +import android.arch.lifecycle.LiveData; +import android.arch.persistence.room.Dao; +import android.arch.persistence.room.Delete; +import android.arch.persistence.room.Insert; +import android.arch.persistence.room.Query; +import android.arch.persistence.room.Update; + +import java.util.List; + +@Dao +public interface NotificationDao { + + @Insert + long insert(Notification notification); + + @Update + void update(Notification notification); + + @Delete + void delete(Notification notification); + + @Query("DELETE FROM table_notification") + void deleteAllNotificationMessages(); + + @Query("SELECT * FROM table_notification Order By date DESC") + LiveData> getNotifications(); +} diff --git a/app/src/main/java/com/sam/swahilibox/model/NotificationDatabase.java b/app/src/main/java/com/sam/swahilibox/model/NotificationDatabase.java new file mode 100644 index 0000000..5245508 --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/model/NotificationDatabase.java @@ -0,0 +1,16 @@ +package com.sam.swahilibox.model; + +import android.arch.persistence.db.SupportSQLiteDatabase; +import android.arch.persistence.room.Database; +import android.arch.persistence.room.Room; +import android.arch.persistence.room.RoomDatabase; +import android.content.Context; +import android.os.AsyncTask; +import android.support.annotation.NonNull; + +@Database(entities = Notification.class,version = 1) +public abstract class NotificationDatabase extends RoomDatabase { + + public abstract NotificationDao notificationDao(); + +} diff --git a/app/src/main/java/com/sam/swahilibox/repositories/NotificationRepository.java b/app/src/main/java/com/sam/swahilibox/repositories/NotificationRepository.java new file mode 100644 index 0000000..8610b24 --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/repositories/NotificationRepository.java @@ -0,0 +1,60 @@ +package com.sam.swahilibox.repositories; + +import android.arch.lifecycle.LiveData; +import android.arch.persistence.room.Room; +import android.content.Context; +import android.os.AsyncTask; + +import com.sam.swahilibox.model.Notification; +import com.sam.swahilibox.model.NotificationDao; +import com.sam.swahilibox.model.NotificationDatabase; + +import java.util.List; + +public class NotificationRepository { + + private static NotificationDatabase notificationsDatabase; + private NotificationDao notificationDAO; + private static final Object LOCK = new Object(); + + public synchronized static NotificationDatabase getNotificationDatabase(Context context){ + if(notificationsDatabase == null) { + synchronized (LOCK) { + if (notificationsDatabase == null) { + notificationsDatabase = Room.databaseBuilder(context, + NotificationDatabase.class, "notifications db").build(); + } + } + } + return notificationsDatabase; + } + public LiveData> getNotifications(Context context) { + if (notificationDAO == null) { + notificationDAO = NotificationRepository.getNotificationDatabase(context).notificationDao(); + } + return notificationDAO.getNotifications(); + } + public void deleteMessage(Notification notification){ + new DeleteAsyncTask(notificationDAO).execute(notification); + } + public void DeleteAlLMessages(){new DeleteAllNotificationMessages(notificationDAO).execute();} + //should be performed on background thread + private static class DeleteAsyncTask extends AsyncTask{ + NotificationDao notificationDao; + public DeleteAsyncTask(NotificationDao notificationDao){this.notificationDao = notificationDao;} + @Override + protected Void doInBackground(Notification... notifications) { + notificationDao.delete(notifications[0]); + return null; + } + } + private static class DeleteAllNotificationMessages extends AsyncTask{ + NotificationDao notificationDao; + public DeleteAllNotificationMessages(NotificationDao notificationDao){this.notificationDao = notificationDao;} + @Override + protected Void doInBackground(Void... voids) { + notificationDao.deleteAllNotificationMessages(); + return null; + } + } +} diff --git a/app/src/main/java/com/sam/swahilibox/viewmodels/NotificationViewModel.java b/app/src/main/java/com/sam/swahilibox/viewmodels/NotificationViewModel.java new file mode 100644 index 0000000..a33f532 --- /dev/null +++ b/app/src/main/java/com/sam/swahilibox/viewmodels/NotificationViewModel.java @@ -0,0 +1,28 @@ +package com.sam.swahilibox.viewmodels; + +import android.app.Application; +import android.arch.lifecycle.AndroidViewModel; +import android.arch.lifecycle.LiveData; +import android.support.annotation.NonNull; + +import com.sam.swahilibox.model.Notification; +import com.sam.swahilibox.repositories.NotificationRepository; + +import java.util.List; + +public class NotificationViewModel extends AndroidViewModel { + private NotificationRepository repository; + private LiveData> allNotes; + + public NotificationViewModel(@NonNull Application application) { + super(application); + repository = new NotificationRepository(); + allNotes = repository.getNotifications(application); + } + public LiveData> getAllNotes(){ + return allNotes; + } + public void delete(Notification notification){repository.deleteMessage(notification);} + public void deleteAll(){repository.DeleteAlLMessages();} +} + diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/LogIn.java b/app/src/main/java/ke/co/swahilibox/swahilibox/LogIn.java deleted file mode 100644 index 7ee17fd..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/LogIn.java +++ /dev/null @@ -1,129 +0,0 @@ -package ke.co.swahilibox.swahilibox; - -import android.app.ProgressDialog; -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import com.parse.LogInCallback; -import com.parse.ParseUser; - -import butterknife.ButterKnife; -import butterknife.InjectView; -import ke.co.swahilibox.swahilibox.helper.PrefManager; - -public class LogIn extends AppCompatActivity { - - private static final String TAG = LogIn.class.getSimpleName(); - private static final int REQUEST_SIGNUP = 0; - - @InjectView(R.id.input_username) - EditText username; - @InjectView(R.id.input_password) - EditText password; - @InjectView(R.id.btn_login) - Button logIn; - @InjectView(R.id.link_signup) - TextView signUp; - - PrefManager pref = null; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_log_in); - ButterKnife.inject(this); - pref = new PrefManager(this); - logIn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - logIn(); - } - }); - - signUp.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent(getApplicationContext(), SignUp.class); - startActivity(intent); - overridePendingTransition(R.transition.slide_in_right, R.transition.slide_out_left); - finish(); - } - }); - } - - public void logIn() { - if (!validate()) { - onLogInFailed(); - return; - } - - logIn.setEnabled(false); - - final ProgressDialog progressDialog = new ProgressDialog(LogIn.this); - progressDialog.setIndeterminate(true); - progressDialog.setMessage("Logging you in..."); - progressDialog.show(); - - final String userName = username.getText().toString(); - String _pass = password.getText().toString(); - - ParseUser.logInInBackground(userName, _pass, new LogInCallback() { - @Override - public void done(ParseUser user, com.parse.ParseException e) { - //If user exists and authenticated send them to main - if (user != null) { - pref.createLoginSession(userName); - Intent intent = new Intent(LogIn.this, Main.class); - startActivity(intent); - overridePendingTransition(R.transition.push_up_in, R.transition.push_up_out); - finish(); - } else { - onLogInFailed(); - } - - progressDialog.dismiss(); - - } - }); - - } - - @Override - public void onBackPressed() { - moveTaskToBack(false); - } - - public void onLoginSuccess() { - logIn.setEnabled(true); - finish(); - } - - public void onLogInFailed() { - Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show(); - logIn.setEnabled(true); - } - - public boolean validate() { - boolean valid = true; - - String userName = this.username.getText().toString(); - String _password = this.password.getText().toString(); - - - if (_password.isEmpty() || password.length() < 4 || password.length() > 10) { - password.setError("between 4 and 10 alphanumeric characters"); - valid = false; - } else { - - password.setError(null); - } - - return valid; - } -} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/Main.java b/app/src/main/java/ke/co/swahilibox/swahilibox/Main.java deleted file mode 100644 index 2efdf16..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/Main.java +++ /dev/null @@ -1,297 +0,0 @@ -package ke.co.swahilibox.swahilibox; - -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.os.Build; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.design.widget.NavigationView; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.util.Log; -import android.view.ActionMode; -import android.view.ContextMenu; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.widget.AbsListView; -import android.widget.AdapterView; -import android.widget.ListView; -import android.widget.TextView; -import android.widget.Toast; - -import com.parse.ParseUser; - -import java.util.ArrayList; -import java.util.List; - -import ke.co.swahilibox.swahilibox.adapter.MessageAdapter; -import ke.co.swahilibox.swahilibox.database.SwahiliBoxDatasource; -import ke.co.swahilibox.swahilibox.helper.ParseUtil; -import ke.co.swahilibox.swahilibox.helper.PrefManager; -import ke.co.swahilibox.swahilibox.model.Message; - - -/** - * Created by japheth on 11/15/15. - */ -public class Main extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { - private static String TAG = Main.class.getSimpleName(); - - private static final String SELECTED_ITEM_ID = "selected_item_id"; - private static final String FIRST_TIME = "first_time"; - private Toolbar mToolbar; - private NavigationView mDrawer; - private DrawerLayout mDrawerLayout; - private ActionBarDrawerToggle mDrawerToggle; - private int mSelectedId; - private boolean mUserSawDrawer = false; - private ListView listView; - private MessageAdapter adapter; - private List messages; - private PrefManager pref; - private TextView user_name; - private SwahiliBoxDatasource dataSource; - private ActionMode.Callback mActionModeCallback; - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - pref = new PrefManager(this); - dataSource = new SwahiliBoxDatasource(this); - dataSource.open(); - - mToolbar = (Toolbar) findViewById(R.id.app_bar); - setSupportActionBar(mToolbar); - - user_name = (TextView) findViewById(R.id.username); - mDrawer = (NavigationView) findViewById(R.id.main_drawer); - mDrawer.setNavigationItemSelectedListener(this); - mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); - - listView = (ListView) findViewById(R.id.list_view); - this.listView.setEmptyView(findViewById(R.id.empty)); //if list view is empty dispay the empty textview - messages = new ArrayList<>(); - - updateDisplay(); - - Intent intent = getIntent(); - - mDrawerToggle = new ActionBarDrawerToggle(this, - mDrawerLayout, - mToolbar, - R.string.drawer_open, - R.string.drawer_close); - mDrawerLayout.setDrawerListener(mDrawerToggle); - mDrawerToggle.syncState(); - if (!didUserSeeDrawer()) { - showDrawer(); - markDrawerSeen(); - } else { - hideDrawer(); - } - mSelectedId = savedInstanceState == null ? 0 : savedInstanceState.getInt(SELECTED_ITEM_ID); - navigate(mSelectedId); - - ParseUser user = ParseUser.getCurrentUser(); - String email = user.getEmail(); - user_name.setText(user.getUsername()); - - if (email != null) { - Log.i(TAG, "Parse user email" + user.getEmail()); - ParseUtil.subscribeWithEmail(user.getEmail()); - } else { - Log.i(TAG, "Email is null. Not subscribing to parse!"); - } - - - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { - //use floating context menu on Froyo and Ginger bread - registerForContextMenu(listView); - } else { - //use contextual action bar on Honeycomb and higher - listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); - listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { - @Override - public void onItemCheckedStateChanged(ActionMode actionMode, int i, long l, boolean b) { - - } - - @Override - public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { - //inflate the delete_message menu resource file - MenuInflater inflater = actionMode.getMenuInflater(); - inflater.inflate(R.menu.message_list_item_context, menu); - return true; - } - - @Override - public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { - return false; - } - - @Override - public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { - //action taken when a list item is long pressed - switch (menuItem.getItemId()) { - case R.id.delete_message: - MessageAdapter adapter = (MessageAdapter) listView.getAdapter(); - - //loop through all items - for (int i = adapter.getCount() - 1; i >= 0; i--) { - //check if item is checked - if (listView.isItemChecked(i)) { - //delete selected item - dataSource.deleteMessage(adapter.getItem(i)); - } - - } - actionMode.finish(); - return true; - - default: - return false; - } - } - - @Override - public void onDestroyActionMode(ActionMode actionMode) { - //update the display - messages = dataSource.findAll(); - updateDisplay(); - } - }); - } - - - } - - private boolean didUserSeeDrawer() { - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - mUserSawDrawer = sharedPreferences.getBoolean(FIRST_TIME, false); - return mUserSawDrawer; - } - - private void markDrawerSeen() { - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - mUserSawDrawer = true; - sharedPreferences.edit().putBoolean(FIRST_TIME, mUserSawDrawer).apply(); - } - - private void showDrawer() { - mDrawerLayout.openDrawer(GravityCompat.START); - } - - private void hideDrawer() { - mDrawerLayout.closeDrawer(GravityCompat.START); - } - - //navigate the navigation view menu - private void navigate(int mSelectedId) { - Intent intent = null; - - if (mSelectedId != 0) { - switch (mSelectedId) { - case R.id.log_out: - pref.logOut(); - intent = new Intent(this, LogIn.class); - startActivity(intent); - overridePendingTransition(R.transition.push_down_in, R.transition.push_down_out); - finish(); - break; - case R.id.about_us: - intent = new Intent(this, AboutUs.class); - startActivity(intent); - Toast.makeText(this, "Loading...", Toast.LENGTH_LONG).show(); - break; - case R.id.invite: - intent = new Intent(Intent.ACTION_SEND); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, "Hello, you are invited to join SwahiliBox. " + - "Check our website http://www.swahilibox.co.ke and download the " + - "SwahiliBox App to stay upto date"); - startActivity(intent); - break; - } - } - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - mDrawerToggle.onConfigurationChanged(newConfig); - } - - @Override - public boolean onNavigationItemSelected(MenuItem menuItem) { - - menuItem.setChecked(true); - mSelectedId = menuItem.getItemId(); - - navigate(mSelectedId); - return true; - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt(SELECTED_ITEM_ID, mSelectedId); - } - - @Override - public void onBackPressed() { - if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { - mDrawerLayout.closeDrawer(GravityCompat.START); - } else { - super.onBackPressed(); - } - } - - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - getMenuInflater().inflate(R.menu.message_list_item_context, menu); - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); - int position = info.position; - Message message = (Message) listView.getAdapter().getItem(position); - switch (item.getItemId()) { - case R.id.delete_message: - dataSource.deleteMessage(message); - updateDisplay(); - return true; - } - return super.onContextItemSelected(item); - } - - public void updateDisplay() { - //get list of messages from the database and set - //the adapter - messages = dataSource.findAll(); - adapter = new MessageAdapter(this, messages); - listView.setAdapter(adapter); - - } - - @Override - protected void onResume() { - super.onResume(); - dataSource.open(); - } - - @Override - protected void onPause() { - super.onPause(); - dataSource.close(); - } -} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/SignUp.java b/app/src/main/java/ke/co/swahilibox/swahilibox/SignUp.java deleted file mode 100644 index 624ee1a..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/SignUp.java +++ /dev/null @@ -1,144 +0,0 @@ -package ke.co.swahilibox.swahilibox; - -import android.app.ProgressDialog; -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import com.parse.ParseUser; -import com.parse.SignUpCallback; - -import butterknife.ButterKnife; -import butterknife.InjectView; -import ke.co.swahilibox.swahilibox.helper.PrefManager; - -public class SignUp extends AppCompatActivity { - - private static final String TAG = "SignupActivity"; - - @InjectView(R.id.input_name) - EditText name; - @InjectView(R.id.input_email) - EditText email; - @InjectView(R.id.input_password) - EditText password; - @InjectView(R.id.btn_signup) - Button signUp; - @InjectView(R.id.link_login) - TextView logInLink; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_sign_up); - ButterKnife.inject(this); - - signUp.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - signup(); - } - }); - - logInLink.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(getApplicationContext(), LogIn.class); - startActivity(intent); - overridePendingTransition(R.transition.slide_in_left, R.transition.slide_out_right); - } - }); - } - - public void signup() { - - if (!validate()) { - onSignupFailed(); - return; - } - - signUp.setEnabled(false); - - final ProgressDialog progressDialog = new ProgressDialog(SignUp.this); - progressDialog.setIndeterminate(true); - progressDialog.setMessage("Creating Account..."); - progressDialog.show(); - - String name = this.name.getText().toString(); - final String email = this.email.getText().toString(); - String password = this.password.getText().toString(); - - ParseUser user = new ParseUser(); - user.setEmail(email); - user.setUsername(name); - user.setPassword(password); - user.signUpInBackground(new SignUpCallback() { - - - @Override - public void done(com.parse.ParseException e) { - if (e == null) { - new PrefManager(SignUp.this).createLoginSession(email); - onSignupSuccess(); - } else { - onSignupFailed(); - } - - progressDialog.dismiss(); - } - }); - - } - - - public void onSignupSuccess() { - signUp.setEnabled(true); - Intent intent = new Intent(SignUp.this, Splash.class); - startActivity(intent); - overridePendingTransition(R.transition.slide_in_right, R.transition.slide_out_left); - finish(); - } - - public void onSignupFailed() { - Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show(); - - signUp.setEnabled(true); - } - - public boolean validate() { - boolean valid = true; - - String name = this.name.getText().toString(); - String email = this.email.getText().toString(); - String password = this.password.getText().toString(); - - if (name.isEmpty() || name.length() < 3) { - this.name.setError("at least 3 characters"); - valid = false; - } else { - this.name.setError(null); - } - - if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) { - this.email.setError("enter a valid email address"); - valid = false; - } else { - this.email.setError(null); - } - - if (password.isEmpty() || password.length() < 4 || password.length() > 10) { - this.password.setError("between 4 and 10 alphanumeric characters"); - valid = false; - } else { - this.password.setError(null); - } - - return valid; - } -} - diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/SwahiliBoxParse.java b/app/src/main/java/ke/co/swahilibox/swahilibox/SwahiliBoxParse.java deleted file mode 100644 index 81c6a5c..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/SwahiliBoxParse.java +++ /dev/null @@ -1,39 +0,0 @@ -package ke.co.swahilibox.swahilibox; - -import android.app.Application; -import android.util.Log; - -import com.parse.ParseACL; -import com.parse.ParseUser; - -import ke.co.swahilibox.swahilibox.helper.ParseUtil; - -/** - * Created by japheth on 11/16/15. - */ -public class SwahiliBoxParse extends Application { - /** - * This is an application class, executed on app launch - * Parse is initialized here - */ - private static SwahiliBoxParse mInstance; - - public static synchronized SwahiliBoxParse getInstance() { - return mInstance; - } - - @Override - public void onCreate() { - super.onCreate(); - Log.i("SwahiliBoxParse", "SwahiliBoxParse on create"); - - mInstance = this; - //register with parse - ParseUtil.registerParse(getApplicationContext()); - ParseUser.enableAutomaticUser(); - ParseACL defaultAcl = new ParseACL(); - - defaultAcl.setPublicReadAccess(true); - ParseACL.setDefaultACL(defaultAcl, true); - } -} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/adapter/MessageAdapter.java b/app/src/main/java/ke/co/swahilibox/swahilibox/adapter/MessageAdapter.java deleted file mode 100644 index 0e4cb31..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/adapter/MessageAdapter.java +++ /dev/null @@ -1,44 +0,0 @@ -package ke.co.swahilibox.swahilibox.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import java.util.List; - -import ke.co.swahilibox.swahilibox.R; -import ke.co.swahilibox.swahilibox.model.Message; - -/** - * Created by japheth on 11/17/15. - */ -public class MessageAdapter extends ArrayAdapter { - - private static final String TAG = MessageAdapter.class.getSimpleName(); - Context context; - List messages; - - public MessageAdapter(Context context, List messageList) { - super(context, 0, messageList); - this.context = context; - messages = messageList; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View view = View.inflate(context, R.layout.list_item, null); - - Message message = getItem(position); - TextView mess = (TextView) view.findViewById(R.id.message); - TextView title = (TextView) view.findViewById(R.id.title); - - title.setText(message.getTitle()); - mess.setText(message.getMessage()); - - return view; - } -} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/database/SwahiliBoxDBOpenHelper.java b/app/src/main/java/ke/co/swahilibox/swahilibox/database/SwahiliBoxDBOpenHelper.java deleted file mode 100644 index 4f2a739..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/database/SwahiliBoxDBOpenHelper.java +++ /dev/null @@ -1,44 +0,0 @@ -package ke.co.swahilibox.swahilibox.database; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; -import android.util.Log; - -/** - * Created by japheth on 11/20/15. - */ -public class SwahiliBoxDBOpenHelper extends SQLiteOpenHelper { - - private static final String TAG = SwahiliBoxDBOpenHelper.class.getSimpleName(); - - private static final String DATABASE_NAME = "SwahiliBox"; - private static final int DATABASE_VERSION = 1; - - public static final String TABLE_NOTIFICATIONS = "notifications"; - public static final String COLUMN_NOTIFICATION_ID = "notification_id"; - public static final String COLUMN_NOTIFICATION_TITLE = "notification_title"; - public static final String COLUMN_NOTIFICATION_MESSAGE = "notification_message"; - - public static final String TABLE_CREATE = - "CREATE TABLE " + TABLE_NOTIFICATIONS + " (" + - COLUMN_NOTIFICATION_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + - COLUMN_NOTIFICATION_TITLE + " TEXT, " + - COLUMN_NOTIFICATION_MESSAGE + " TEXT " + ")"; - - public SwahiliBoxDBOpenHelper(Context context) { - super(context, DATABASE_NAME, null, DATABASE_VERSION); - } - - @Override - public void onCreate(SQLiteDatabase sqLiteDatabase) { - sqLiteDatabase.execSQL(TABLE_CREATE); - Log.i(TAG, "Database created"); - } - - @Override - public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { - sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NOTIFICATIONS); - onCreate(sqLiteDatabase); - } -} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/database/SwahiliBoxDatasource.java b/app/src/main/java/ke/co/swahilibox/swahilibox/database/SwahiliBoxDatasource.java deleted file mode 100644 index e54a0f7..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/database/SwahiliBoxDatasource.java +++ /dev/null @@ -1,88 +0,0 @@ -package ke.co.swahilibox.swahilibox.database; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; -import android.util.Log; - -import java.util.ArrayList; -import java.util.List; - -import ke.co.swahilibox.swahilibox.model.Message; - -/** - * Created by japheth on 11/20/15. - */ -public class SwahiliBoxDatasource { - /** - * All datatbase base interactions are through this class - */ - - public static final String TAG = SwahiliBoxDatasource.class.getSimpleName(); - - SQLiteOpenHelper dbhelper; - SQLiteDatabase database; - - private static final String[] allColumns = { - SwahiliBoxDBOpenHelper.COLUMN_NOTIFICATION_ID, - SwahiliBoxDBOpenHelper.COLUMN_NOTIFICATION_TITLE, - SwahiliBoxDBOpenHelper.COLUMN_NOTIFICATION_MESSAGE}; - - public SwahiliBoxDatasource(Context context) { - dbhelper = new SwahiliBoxDBOpenHelper(context); - } - - public void open() { - Log.i(TAG, "Database opened"); - database = dbhelper.getWritableDatabase(); - } - - public void close() { - Log.i(TAG, "Database closed"); - dbhelper.close(); - } - - public Message createNotification(Message message) { - ContentValues values = new ContentValues(); - values.put(SwahiliBoxDBOpenHelper.COLUMN_NOTIFICATION_TITLE, message.getTitle()); - values.put(SwahiliBoxDBOpenHelper.COLUMN_NOTIFICATION_MESSAGE, message.getMessage()); - long insertId = database.insert(SwahiliBoxDBOpenHelper.TABLE_NOTIFICATIONS, null, values); - message.setId(insertId); - - return message; - } - - public List findAll() { - - Cursor cursor = database.query(SwahiliBoxDBOpenHelper.TABLE_NOTIFICATIONS, allColumns, - null, null, null, null, null); - Log.i(TAG, "Returned: " + cursor.getCount()); - List messages = cursortoList(cursor); - return messages; - } - - private List cursortoList(Cursor cursor) { - List messages = new ArrayList<>(); - if (cursor.getCount() > 0) { - while (cursor.moveToNext()) { - Message message = new Message(); - message.setId(cursor.getLong(cursor.getColumnIndex(SwahiliBoxDBOpenHelper.COLUMN_NOTIFICATION_ID))); - message.setTitle(cursor.getString(cursor.getColumnIndex(SwahiliBoxDBOpenHelper.COLUMN_NOTIFICATION_TITLE))); - message.setMessage(cursor.getString(cursor.getColumnIndex(SwahiliBoxDBOpenHelper.COLUMN_NOTIFICATION_MESSAGE))); - - messages.add(message); - } - } - - return messages; - } - - public boolean deleteMessage(Message message){ - - String where = SwahiliBoxDBOpenHelper.COLUMN_NOTIFICATION_ID + "=" + message.getId(); - int result = database.delete(SwahiliBoxDBOpenHelper.TABLE_NOTIFICATIONS , where, null); - return (result == 1); - } -} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/helper/NotificationUtils.java b/app/src/main/java/ke/co/swahilibox/swahilibox/helper/NotificationUtils.java deleted file mode 100644 index affe779..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/helper/NotificationUtils.java +++ /dev/null @@ -1,104 +0,0 @@ -package ke.co.swahilibox.swahilibox.helper; - -import android.app.ActivityManager; -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.graphics.BitmapFactory; -import android.media.RingtoneManager; -import android.os.Build; -import android.support.v4.app.NotificationCompat; -import android.text.TextUtils; - -import java.util.List; - -import ke.co.swahilibox.swahilibox.AppConfig; -import ke.co.swahilibox.swahilibox.R; - -/** - * Created by japheth on 11/15/15. - */ -public class NotificationUtils { - /** - * Handles notifications - */ - private static String TAG = NotificationUtils.class.getSimpleName(); - private Context context; - - public NotificationUtils() { - - } - - public NotificationUtils(Context context) { - this.context = context; - } - - //checks whether the app is i background or not - public static boolean isAppInBackground(Context context) { - boolean isInBackground = true; - ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) { - List runningAppProcess = activityManager.getRunningAppProcesses(); - for (ActivityManager.RunningAppProcessInfo processInfo : runningAppProcess) { - if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { - for (String activeProcess : processInfo.pkgList) { - if (activeProcess.equals(context.getPackageName())) { - isInBackground = false; - } - } - } - } - } else { - List taskInfo = activityManager.getRunningTasks(1); - ComponentName componentInfo = taskInfo.get(0).topActivity; - if (componentInfo.getPackageName().equals(context.getPackageName())) { - isInBackground = false; - } - } - return isInBackground; - } - - public void showNotificationMessage(String title, String message, Intent intent) { - - //check for empty push messages - if (TextUtils.isEmpty(message)) - return; - if (isAppInBackground(context)) { - int icon = R.mipmap.ic_launcher; - int notificationId = AppConfig.NOTIFICATION_ID; - - PendingIntent resultPendingIntent = PendingIntent.getActivity( - context, - 0, - intent, - PendingIntent.FLAG_CANCEL_CURRENT - ); - - NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); - - NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( - context); - Notification notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0) - .setAutoCancel(true) - .setContentTitle(title) - .setSubText("SwahiliBox notification") - .setStyle(inboxStyle) - .setContentIntent(resultPendingIntent) - .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) - .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), icon)) - .setContentText(message) - .build(); - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(notificationId, notification); - } else { - intent.putExtra("title", title); - intent.putExtra("message", message); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); - context.startActivity(intent); - } - } -} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/helper/ParseUtil.java b/app/src/main/java/ke/co/swahilibox/swahilibox/helper/ParseUtil.java deleted file mode 100644 index 9a6a8c5..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/helper/ParseUtil.java +++ /dev/null @@ -1,54 +0,0 @@ -package ke.co.swahilibox.swahilibox.helper; - -import android.app.Activity; -import android.content.Context; -import android.text.TextUtils; -import android.util.Log; -import android.widget.Toast; - -import com.parse.Parse; -import com.parse.ParseException; -import com.parse.ParseInstallation; -import com.parse.ParsePush; -import com.parse.PushService; -import com.parse.SaveCallback; - -import ke.co.swahilibox.swahilibox.AppConfig; - -/** - * Created by japheth on 11/15/15. - */ -public class ParseUtil { - /** - * Contains utility methods to interact with the parse api,ie - * initializing parse, subscribing using email to send individual notifications - */ - private static String TAG = ParseUtil.class.getSimpleName(); - - public static void verifyParseConfiguration(Context context) { - if (TextUtils.isEmpty(AppConfig.PARSE_APPLICATION_ID) || TextUtils.isEmpty(AppConfig.PARSE_CLIENT_KEY)) - Toast.makeText(context, "Please configure your app", Toast.LENGTH_SHORT).show(); - ((Activity) context).finish(); - } - - public static void registerParse(Context context) { - // initializing parse library - Parse.initialize(context, AppConfig.PARSE_APPLICATION_ID, AppConfig.PARSE_CLIENT_KEY); - PushService.startServiceIfRequired(context); - ParseInstallation.getCurrentInstallation().saveInBackground(); - - ParsePush.subscribeInBackground(AppConfig.PARSE_CHANNEL, new SaveCallback() { - @Override - public void done(ParseException e) { - Log.i(TAG, "Successfully subscribed to Parse!"); - } - }); - } - - - public static void subscribeWithEmail(String email) { - ParseInstallation installation = new ParseInstallation(); - installation.put("email", email); - installation.saveInBackground(); - } -} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/model/Message.java b/app/src/main/java/ke/co/swahilibox/swahilibox/model/Message.java deleted file mode 100644 index fbdfc04..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/model/Message.java +++ /dev/null @@ -1,52 +0,0 @@ -package ke.co.swahilibox.swahilibox.model; - -/** - * Created by japheth on 11/16/15. - */ -public class Message { - - private String message; - private long timestamp; - private long id; - private String title; - - public Message() { - } - - public Message(String message, long timestamp) { - this.message = message; - this.timestamp = timestamp; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } -} diff --git a/app/src/main/java/ke/co/swahilibox/swahilibox/receiver/CustomPushReceiver.java b/app/src/main/java/ke/co/swahilibox/swahilibox/receiver/CustomPushReceiver.java deleted file mode 100644 index a52b9f1..0000000 --- a/app/src/main/java/ke/co/swahilibox/swahilibox/receiver/CustomPushReceiver.java +++ /dev/null @@ -1,123 +0,0 @@ -package ke.co.swahilibox.swahilibox.receiver; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import com.parse.ParsePushBroadcastReceiver; - -import org.json.JSONException; -import org.json.JSONObject; - -import ke.co.swahilibox.swahilibox.Splash; -import ke.co.swahilibox.swahilibox.database.SwahiliBoxDatasource; -import ke.co.swahilibox.swahilibox.helper.NotificationUtils; -import ke.co.swahilibox.swahilibox.model.Message; - -/** - * Created by japheth on 11/16/15. - */ -public class CustomPushReceiver extends ParsePushBroadcastReceiver { - - private final String TAG = CustomPushReceiver.class.getSimpleName(); - - private NotificationUtils notificationUtils; - SwahiliBoxDatasource datasource; - - private Intent parseIntent; - - public CustomPushReceiver() { - super(); - Log.i(TAG, "Initialized the receiver"); - } - - @Override - protected void onPushReceive(Context context, Intent intent) { - super.onPushReceive(context, intent); - datasource = new SwahiliBoxDatasource(context); - datasource.open(); - - if (intent == null) - return; - - try { - JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data")); - - Log.e(TAG, "Push received: " + json); - - parseIntent = intent; - - parsePushJson(context, json); - - } catch (JSONException e) { - Log.e(TAG, "Push message json exception: " + e.getMessage()); - } - } - - @Override - protected void onPushDismiss(Context context, Intent intent) { - super.onPushDismiss(context, intent); - datasource.close(); - } - - @Override - protected void onPushOpen(Context context, Intent intent) { - super.onPushOpen(context, intent); - } - - /** - * Parses the push notification json - * - * @param context - * @param json - */ - private void parsePushJson(Context context, JSONObject json) { - try { - boolean isBackground = json.getBoolean("is_background"); - JSONObject data = json.getJSONObject("data"); - String title = data.getString("title"); - String message = data.getString("message"); - - /** - * Create message object - * set attributes - * save it - */ - Message mess = new Message(); - mess.setMessage(message); - mess.setTitle(title); - - datasource.createNotification(mess); - - Log.i(TAG, "Parsed JSON: " + title + message); - - if (!isBackground) { - Intent resultIntent = new Intent(context, Splash.class); - showNotificationMessage(context, title, message, resultIntent); - } - - } catch (JSONException e) { - Log.e(TAG, "Push message json exception: " + e.getMessage()); - } - } - - /** - * Shows the notification message in the notification bar - * If the app is in background, launches the app - * - * @param context - * @param title - * @param message - * @param intent - */ - public void showNotificationMessage(Context context, String title, String message, Intent intent) { - - notificationUtils = new NotificationUtils(context); - - intent.putExtras(parseIntent.getExtras()); - - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - - notificationUtils.showNotificationMessage(title, message, intent); - } -} diff --git a/app/src/main/res/mipmap-hdpi/ic_info_outline_black_24dp.png b/app/src/main/res/drawable/ic_info_outline_black_24dp.png similarity index 100% rename from app/src/main/res/mipmap-hdpi/ic_info_outline_black_24dp.png rename to app/src/main/res/drawable/ic_info_outline_black_24dp.png diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_menu_camera.xml b/app/src/main/res/drawable/ic_menu_camera.xml new file mode 100644 index 0000000..634fe92 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_menu_gallery.xml b/app/src/main/res/drawable/ic_menu_gallery.xml new file mode 100644 index 0000000..03c7709 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_manage.xml b/app/src/main/res/drawable/ic_menu_manage.xml new file mode 100644 index 0000000..aeb047d --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_manage.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_send.xml b/app/src/main/res/drawable/ic_menu_send.xml new file mode 100644 index 0000000..fdf1c90 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_share.xml b/app/src/main/res/drawable/ic_menu_share.xml new file mode 100644 index 0000000..338d95a --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_slideshow.xml b/app/src/main/res/drawable/ic_menu_slideshow.xml new file mode 100644 index 0000000..5e9e163 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/mipmap-hdpi/ic_power_settings_new_black_24dp.png b/app/src/main/res/drawable/ic_power_settings_new_black_24dp.png similarity index 100% rename from app/src/main/res/mipmap-hdpi/ic_power_settings_new_black_24dp.png rename to app/src/main/res/drawable/ic_power_settings_new_black_24dp.png diff --git a/app/src/main/res/drawable/launcher_icon.png b/app/src/main/res/drawable/launcher_icon.png new file mode 100644 index 0000000..e1e3d60 Binary files /dev/null and b/app/src/main/res/drawable/launcher_icon.png differ diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 0000000..6d81870 --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-mdpi/splash.jpg b/app/src/main/res/drawable/splash.jpg similarity index 100% rename from app/src/main/res/mipmap-mdpi/splash.jpg rename to app/src/main/res/drawable/splash.jpg diff --git a/app/src/main/res/layout/activity_alerts.xml b/app/src/main/res/layout/activity_alerts.xml new file mode 100644 index 0000000..a2da2d0 --- /dev/null +++ b/app/src/main/res/layout/activity_alerts.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_log_in.xml b/app/src/main/res/layout/activity_log_in.xml index 17227d9..4e5f4e0 100644 --- a/app/src/main/res/layout/activity_log_in.xml +++ b/app/src/main/res/layout/activity_log_in.xml @@ -1,85 +1,56 @@ - - + tools:context=".LogIn"> + android:src="@drawable/login" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0" /> - - - - - - - - - - - - - - - + android:layout_marginStart="8dp" + android:layout_marginTop="220dp" + android:layout_marginEnd="8dp" + android:layout_marginBottom="0dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.237" /> + + - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 039b1a7..0000000 --- a/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml deleted file mode 100644 index d93fa38..0000000 --- a/app/src/main/res/layout/activity_sign_up.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_alerts.xml b/app/src/main/res/layout/app_bar_alerts.xml new file mode 100644 index 0000000..488c976 --- /dev/null +++ b/app/src/main/res/layout/app_bar_alerts.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_alerts.xml b/app/src/main/res/layout/content_alerts.xml new file mode 100644 index 0000000..945b18c --- /dev/null +++ b/app/src/main/res/layout/content_alerts.xml @@ -0,0 +1,27 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml deleted file mode 100644 index ba7c53e..0000000 --- a/app/src/main/res/layout/content_main.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/app/src/main/res/layout/drawer_header.xml b/app/src/main/res/layout/drawer_header.xml deleted file mode 100644 index a2dabf7..0000000 --- a/app/src/main/res/layout/drawer_header.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/list_item.xml b/app/src/main/res/layout/list_item.xml deleted file mode 100644 index 872ad5c..0000000 --- a/app/src/main/res/layout/list_item.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/layout/nav_header_alerts.xml b/app/src/main/res/layout/nav_header_alerts.xml new file mode 100644 index 0000000..9891744 --- /dev/null +++ b/app/src/main/res/layout/nav_header_alerts.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/app/src/main/res/layout/notify_item.xml b/app/src/main/res/layout/notify_item.xml new file mode 100644 index 0000000..a9ba3c1 --- /dev/null +++ b/app/src/main/res/layout/notify_item.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/splash.xml b/app/src/main/res/layout/splash.xml similarity index 85% rename from app/src/main/res/drawable/splash.xml rename to app/src/main/res/layout/splash.xml index f6d0f44..63e9794 100644 --- a/app/src/main/res/drawable/splash.xml +++ b/app/src/main/res/layout/splash.xml @@ -5,6 +5,6 @@ + android:src="@drawable/splash" /> \ No newline at end of file diff --git a/app/src/main/res/menu/activity_alerts_drawer.xml b/app/src/main/res/menu/activity_alerts_drawer.xml new file mode 100644 index 0000000..d12bca6 --- /dev/null +++ b/app/src/main/res/menu/activity_alerts_drawer.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/app/src/main/res/menu/alerts.xml b/app/src/main/res/menu/alerts.xml new file mode 100644 index 0000000..a2411e3 --- /dev/null +++ b/app/src/main/res/menu/alerts.xml @@ -0,0 +1,9 @@ + + + + diff --git a/app/src/main/res/menu/menu_drawer.xml b/app/src/main/res/menu/menu_drawer.xml deleted file mode 100644 index 0879c04..0000000 --- a/app/src/main/res/menu/menu_drawer.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_item.xml b/app/src/main/res/menu/menu_item.xml new file mode 100644 index 0000000..a68ffa3 --- /dev/null +++ b/app/src/main/res/menu/menu_item.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/message_list_item_context.xml b/app/src/main/res/menu/message_list_item_context.xml deleted file mode 100644 index 8c84b54..0000000 --- a/app/src/main/res/menu/message_list_item_context.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index e1e3d60..898f3ed 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..dffca36 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-hdpi/splash.jpg b/app/src/main/res/mipmap-hdpi/splash.jpg deleted file mode 100644 index cc0293c..0000000 Binary files a/app/src/main/res/mipmap-hdpi/splash.jpg and /dev/null differ diff --git a/app/src/main/res/mipmap-mdpi/ic_info_outline_black_24dp.png b/app/src/main/res/mipmap-mdpi/ic_info_outline_black_24dp.png deleted file mode 100644 index e0c9fe0..0000000 Binary files a/app/src/main/res/mipmap-mdpi/ic_info_outline_black_24dp.png and /dev/null differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index d47f3e4..64ba76f 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..dae5e08 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_power_settings_new_black_24dp.png b/app/src/main/res/mipmap-mdpi/ic_power_settings_new_black_24dp.png deleted file mode 100644 index b52a029..0000000 Binary files a/app/src/main/res/mipmap-mdpi/ic_power_settings_new_black_24dp.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_info_outline_black_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_info_outline_black_24dp.png deleted file mode 100644 index b706f0d..0000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_info_outline_black_24dp.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 7cf446f..e5ed465 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..14ed0af Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_power_settings_new_black_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_power_settings_new_black_24dp.png deleted file mode 100644 index e9825fb..0000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_power_settings_new_black_24dp.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/splash.jpg b/app/src/main/res/mipmap-xhdpi/splash.jpg deleted file mode 100644 index 1a8224e..0000000 Binary files a/app/src/main/res/mipmap-xhdpi/splash.jpg and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_info_outline_black_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_info_outline_black_24dp.png deleted file mode 100644 index 3847a9f..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_info_outline_black_24dp.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index f8801e7..b0907ca 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..d8ae031 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_power_settings_new_black_24dp.png b/app/src/main/res/mipmap-xxhdpi/ic_power_settings_new_black_24dp.png deleted file mode 100644 index 75af3f9..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_power_settings_new_black_24dp.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/splash.jpg b/app/src/main/res/mipmap-xxhdpi/splash.jpg deleted file mode 100644 index 8cb5337..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/splash.jpg and /dev/null differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_info_outline_black_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_info_outline_black_24dp.png deleted file mode 100644 index c1e2a03..0000000 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_info_outline_black_24dp.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index f792ac6..2c18de9 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..beed3cd Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_power_settings_new_black_24dp.png b/app/src/main/res/mipmap-xxxhdpi/ic_power_settings_new_black_24dp.png deleted file mode 100644 index d206fa4..0000000 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_power_settings_new_black_24dp.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xxxhdpi/splash.png b/app/src/main/res/mipmap-xxxhdpi/splash.png deleted file mode 100644 index ec85ca9..0000000 Binary files a/app/src/main/res/mipmap-xxxhdpi/splash.png and /dev/null differ diff --git a/app/src/main/res/transition/push_down_in.xml b/app/src/main/res/transition/push_down_in.xml deleted file mode 100644 index c4e1b04..0000000 --- a/app/src/main/res/transition/push_down_in.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/transition/push_down_out.xml b/app/src/main/res/transition/push_down_out.xml deleted file mode 100644 index 7c621f3..0000000 --- a/app/src/main/res/transition/push_down_out.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/transition/push_up_in.xml b/app/src/main/res/transition/push_up_in.xml deleted file mode 100644 index 847ea6f..0000000 --- a/app/src/main/res/transition/push_up_in.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/transition/push_up_out.xml b/app/src/main/res/transition/push_up_out.xml deleted file mode 100644 index c41b2fa..0000000 --- a/app/src/main/res/transition/push_up_out.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/transition/slide_in_left.xml b/app/src/main/res/transition/slide_in_left.xml deleted file mode 100644 index 20bc37a..0000000 --- a/app/src/main/res/transition/slide_in_left.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/transition/slide_in_right.xml b/app/src/main/res/transition/slide_in_right.xml deleted file mode 100644 index 3ebed28..0000000 --- a/app/src/main/res/transition/slide_in_right.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/transition/slide_out_left.xml b/app/src/main/res/transition/slide_out_left.xml deleted file mode 100644 index 060b2d9..0000000 --- a/app/src/main/res/transition/slide_out_left.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/transition/slide_out_right.xml b/app/src/main/res/transition/slide_out_right.xml deleted file mode 100644 index 62e56e8..0000000 --- a/app/src/main/res/transition/slide_out_right.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index dbbdd40..fd7a058 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -3,7 +3,6 @@ diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml deleted file mode 100644 index 63fc816..0000000 --- a/app/src/main/res/values-w820dp/dimens.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - 64dp - diff --git a/app/src/main/res/values/color.xml b/app/src/main/res/values/colors.xml similarity index 96% rename from app/src/main/res/values/color.xml rename to app/src/main/res/values/colors.xml index 05eda34..ebf869e 100644 --- a/app/src/main/res/values/color.xml +++ b/app/src/main/res/values/colors.xml @@ -7,4 +7,4 @@ #212121 #727272 #FFFFFF - \ No newline at end of file + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 812cb7b..4ab4520 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,5 +2,7 @@ 16dp 16dp + 8dp + 176dp 16dp - + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1e25d4e..4e7eb64 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,30 +1,31 @@ - SwahiliBox - Alerts + swahilibox + Alerts + Open navigation drawer + Close navigation drawer + Android Studio + android.studio@android.com + Navigation header + Settings + + Home + Gallery + Slideshow + Tools + Share + Send + + SignUp + LogIn + AboutUS + Setting Invite Friends About Us - Log In - Sign Up Log Out - Open - Close - Sign in - Delete + Delete All Notification - - Email - Password (optional) - Sign in or register - Sign in - This email address is invalid - This password is too short - This password is incorrect - This field is required - "Contacts permissions are needed for providing email - completions." - - SignUp - LogIn - AboutUS + //facebook ids + 294662301472915 + fb294662301472915 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index fb775dc..545b9c6 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,30 +1,20 @@ - - - -