Loading QKSMS/src/main/AndroidManifest.xml +17 −2 Original line number Diff line number Diff line Loading @@ -68,9 +68,8 @@ android:name=".ui.MainActivity" android:icon="@mipmap/ic_launcher_teal" android:label="@string/app_name" android:launchMode="singleTask" android:logo="@color/transparent" android:windowSoftInputMode="stateUnchanged|adjustResize"> android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.MAIN" /> Loading @@ -81,6 +80,8 @@ <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> <data android:scheme="mms" /> Loading @@ -88,6 +89,20 @@ <data android:scheme="sms_body" /> </intent-filter> </activity> <activity android:name=".ui.messagelist.MessageListActivity" android:launchMode="singleTop" android:windowSoftInputMode="adjustResize" /> <activity android:name=".ui.settings.SettingsActivity" android:windowSoftInputMode="adjustResize" /> <activity android:name=".ui.search.SearchActivity" android:windowSoftInputMode="adjustResize" /> <activity android:name=".ui.compose.ComposeActivity" android:windowSoftInputMode="adjustResize" /> <activity-alias android:name=".ui.MainActivity-Teal" Loading QKSMS/src/main/java/com/moez/QKSMS/common/DialogHelper.java +5 −2 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import com.moez.QKSMS.ui.MainActivity; import com.moez.QKSMS.ui.base.QKActivity; import com.moez.QKSMS.ui.dialog.DefaultSmsHelper; import com.moez.QKSMS.ui.dialog.QKDialog; import com.moez.QKSMS.ui.messagelist.MessageListActivity; import java.text.ParseException; import java.text.SimpleDateFormat; Loading @@ -30,7 +31,7 @@ public class DialogHelper { showDeleteConversationsDialog(context, threadIds); } public static void showDeleteConversationsDialog(final MainActivity context, final Set<Long> threadIds) { public static void showDeleteConversationsDialog(final QKActivity context, final Set<Long> threadIds) { new DefaultSmsHelper(context, R.string.not_default_delete).showIfNotDefault(null); Set<Long> threads = new HashSet<>(threadIds); // Make a copy so the list isn't reset when multi-select is disabled Loading @@ -43,7 +44,9 @@ public class DialogHelper { Conversation.ConversationQueryHandler handler = new Conversation.ConversationQueryHandler(context.getContentResolver()); Conversation.startDelete(handler, 0, false, threads); Conversation.asyncDeleteObsoleteThreads(handler, 0); context.showMenu(); if (context instanceof MessageListActivity) { context.onBackPressed(); } }) .setNegativeButton(R.string.cancel, null) .show(); Loading QKSMS/src/main/java/com/moez/QKSMS/enums/QKPreference.java +0 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ public enum QKPreference { AVATAR_RECEIVED("pref_key_avatar_received", true), MESSAGE_COUNT("pref_key_message_count", false), SLIDING_TAB("pref_key_sliding_tab", false), TIMESTAMPS_24H("pref_key_24h", false), // General Loading QKSMS/src/main/java/com/moez/QKSMS/transaction/NotificationManager.java +4 −3 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.moez.QKSMS.receiver.WearableIntentReceiver; import com.moez.QKSMS.ui.MainActivity; import com.moez.QKSMS.ui.ThemeManager; import com.moez.QKSMS.ui.messagelist.MessageItem; import com.moez.QKSMS.ui.messagelist.MessageListActivity; import com.moez.QKSMS.ui.popup.QKComposeActivity; import com.moez.QKSMS.ui.popup.QKReplyActivity; import com.moez.QKSMS.ui.settings.SettingsFragment; Loading Loading @@ -316,7 +317,7 @@ public class NotificationManager { if (failedCursor.getCount() == 1) { title = sRes.getString(R.string.failed_message); Intent intent = new Intent(context, MainActivity.class); intent.putExtra(MainActivity.EXTRA_THREAD_ID, failedCursor.getLong(0)); intent.putExtra(MessageListActivity.ARG_THREAD_ID, failedCursor.getLong(0)); PI = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); } else { title = failedCursor.getCount() + " " + sRes.getString(R.string.failed_messages); Loading Loading @@ -475,7 +476,7 @@ public class NotificationManager { final PendingIntent replyPI = PendingIntent.getActivity(context, buildRequestCode(threadId, 0), replyIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent threadIntent = new Intent(context, MainActivity.class); threadIntent.putExtra(MainActivity.EXTRA_THREAD_ID, threadId); threadIntent.putExtra(MessageListActivity.ARG_THREAD_ID, threadId); final PendingIntent threadPI = PendingIntent.getActivity(context, buildRequestCode(threadId, 1), threadIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent readIntent = new Intent(ACTION_MARK_READ); Loading Loading @@ -575,7 +576,7 @@ public class NotificationManager { PendingIntent replyPI = PendingIntent.getActivity(context, buildRequestCode(threadId, 0), replyIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent threadIntent = new Intent(context, MainActivity.class); threadIntent.putExtra(MainActivity.EXTRA_THREAD_ID, threadId); threadIntent.putExtra(MessageListActivity.ARG_THREAD_ID, threadId); PendingIntent threadPI = PendingIntent.getActivity(context, buildRequestCode(threadId, 1), threadIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent readIntent = new Intent(ACTION_MARK_READ); Loading QKSMS/src/main/java/com/moez/QKSMS/ui/MainActivity.java +20 −221 Original line number Diff line number Diff line Loading @@ -14,10 +14,7 @@ import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.support.v4.content.ContextCompat; import android.telephony.PhoneNumberUtils; import android.text.Html; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; Loading @@ -30,45 +27,37 @@ import butterknife.ButterKnife; import com.google.android.mms.pdu_alt.PduHeaders; import com.moez.QKSMS.R; import com.moez.QKSMS.common.ConversationPrefsHelper; import com.moez.QKSMS.common.DialogHelper; import com.moez.QKSMS.common.DonationManager; import com.moez.QKSMS.common.LiveViewManager; import com.moez.QKSMS.common.QKRateSnack; import com.moez.QKSMS.common.google.DraftCache; import com.moez.QKSMS.common.utils.KeyboardUtils; import com.moez.QKSMS.common.utils.MessageUtils; import com.moez.QKSMS.common.utils.Units; import com.moez.QKSMS.data.Conversation; import com.moez.QKSMS.enums.QKPreference; import com.moez.QKSMS.mmssms.Utils; import com.moez.QKSMS.receiver.IconColorReceiver; import com.moez.QKSMS.transaction.NotificationManager; import com.moez.QKSMS.transaction.SmsHelper; import com.moez.QKSMS.ui.base.QKActivity; import com.moez.QKSMS.ui.compose.ComposeFragment; import com.moez.QKSMS.ui.conversationlist.ConversationListFragment; import com.moez.QKSMS.ui.dialog.ConversationSettingsDialog; import com.moez.QKSMS.ui.dialog.DefaultSmsHelper; import com.moez.QKSMS.ui.dialog.QKDialog; import com.moez.QKSMS.ui.dialog.mms.MMSSetupFragment; import com.moez.QKSMS.ui.messagelist.MessageListActivity; import com.moez.QKSMS.ui.messagelist.MessageListFragment; import com.moez.QKSMS.ui.popup.QKReplyActivity; import com.moez.QKSMS.ui.search.SearchFragment; import com.moez.QKSMS.ui.search.SearchActivity; import com.moez.QKSMS.ui.settings.SettingsFragment; import com.moez.QKSMS.ui.view.slidingmenu.SlidingMenu; import com.moez.QKSMS.ui.welcome.WelcomeActivity; import org.ligi.snackengage.SnackEngage; import org.ligi.snackengage.snacks.BaseSnack; import java.net.URLDecoder; import java.util.Collection; public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuListener { public class MainActivity extends QKActivity { private final String TAG = "MainActivity"; public final static String EXTRA_THREAD_ID = "thread_id"; public static long sThreadShowing; private static final int THREAD_LIST_QUERY_TOKEN = 1701; Loading @@ -80,7 +69,6 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL public static final String MMS_SETUP_DONT_ASK_AGAIN = "mmsSetupDontAskAgain"; @Bind(R.id.root) View mRoot; @Bind(R.id.sliding_menu) SlidingMenu mSlidingMenu; private ConversationListFragment mConversationList; private ContentFragment mContent; Loading @@ -97,37 +85,21 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); launchWelcomeActivity(); onNewIntent(getIntent()); setContentView(R.layout.activity_main); setContentView(R.layout.activity_fragment); setTitle(R.string.title_conversation_list); ButterKnife.bind(this); setSlidingTabEnabled(mPrefs.getBoolean(SettingsFragment.SLIDING_TAB, false)); mSlidingMenu.setListener(this); mSlidingMenu.setContent(); mSlidingMenu.setMenu(); mSlidingMenu.showContent(false); mSlidingMenu.showMenu(false); FragmentManager fm = getFragmentManager(); mConversationList = (ConversationListFragment) fm.findFragmentById(R.id.menu_frame); mConversationList = (ConversationListFragment) fm.findFragmentById(R.id.content_frame); if (mConversationList == null) { mConversationList = new ConversationListFragment(); } FragmentTransaction menuTransaction = fm.beginTransaction(); menuTransaction.replace(R.id.menu_frame, mConversationList); menuTransaction.replace(R.id.content_frame, mConversationList); menuTransaction.commit(); mContent = (ContentFragment) fm.findFragmentById(R.id.content_frame); if (mContent == null) { mContent = ComposeFragment.getInstance(null); } FragmentTransaction contentTransaction = fm.beginTransaction(); contentTransaction.replace(R.id.content_frame, (Fragment) mContent); contentTransaction.commit(); onNewIntent(getIntent()); showDialogIfNeeded(savedInstanceState); LiveViewManager.registerView(QKPreference.BACKGROUND, this, key -> { Loading Loading @@ -192,39 +164,13 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL startActivityForResult(welcomeIntent, WelcomeActivity.WELCOME_REQUEST_CODE); } public void showMenu() { mSlidingMenu.showMenu(); } public SlidingMenu getSlidingMenu() { return mSlidingMenu; } /** * Configured the sliding menu view to peek the content or not. * * @param slidingTabEnabled true to peek the content */ public void setSlidingTabEnabled(boolean slidingTabEnabled) { if (slidingTabEnabled) { mSlidingMenu.setBehindOffset(Units.dpToPx(this, 48)); } else { mSlidingMenu.setBehindOffset(0); } } @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); menu.clear(); if (mSlidingMenu.isMenuShowing() || mContent == null) { showBackButton(false); mConversationList.inflateToolbar(menu, inflater, this); } else { showBackButton(true); mContent.inflateToolbar(menu, inflater, this); } return super.onPrepareOptionsMenu(menu); } Loading @@ -238,19 +184,10 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL switch (item.getItemId()) { case android.R.id.home: onKeyUp(KeyEvent.KEYCODE_BACK, null); break; case R.id.menu_settings: switchContent(SettingsFragment.newInstance(R.xml.settings_main), true); break; return true; case R.id.menu_search: switchContent(new SearchFragment(), true); break; case R.id.menu_changelog: DialogHelper.showChangelog(this); break; case R.id.menu_donate: DonationManager.getInstance(this).showDonateDialog(); break; startActivity(SearchActivity.class); return true; } return super.onOptionsItemSelected(item); Loading Loading @@ -306,23 +243,12 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (!mSlidingMenu.isMenuShowing()) { Fragment category = getFragmentManager().findFragmentByTag(SettingsFragment.CATEGORY_TAG); if (category != null) { getFragmentManager().beginTransaction() .replace(R.id.content_frame, SettingsFragment.newInstance(R.xml.settings_main)).commit(); } else { mSlidingMenu.showMenu(); } return true; } else { if (mConversationList.isShowingBlocked()) { mConversationList.setShowingBlocked(false); } else { finish(); } } } return false; } Loading @@ -331,9 +257,6 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL protected void onPause() { super.onPause(); sThreadShowing = 0; if (!mSlidingMenu.isMenuShowing()) { mContent.onContentClosed(); } } @Override Loading @@ -353,10 +276,6 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL protected void onResume() { super.onResume(); if (!mSlidingMenu.isMenuShowing()) { mContent.onContentOpened(); } if (mContent != null && mContent instanceof MessageListFragment) { sThreadShowing = ((MessageListFragment) mContent).getThreadId(); QKReplyActivity.dismiss(sThreadShowing); Loading Loading @@ -386,41 +305,19 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL // that makes the most sense. setIntent(intent); // This method is called whenever a MainActivity intent is started. Sometimes this is from a // notification; other times it's from the user clicking on the app icon in the home screen long threadId = intent.getLongExtra(EXTRA_THREAD_ID, -1); boolean shouldOpenConversation = intent.hasExtra(MessageListActivity.ARG_THREAD_ID); // The activity can also be launched by clicking on the message button from the contacts app // Check for {sms,mms}{,to}: schemes, in which case we know to open a conversation if (intent.getData() != null) { String data = intent.getData().toString(); String scheme = intent.getData().getScheme(); if (scheme.startsWith("smsto") || scheme.startsWith("mmsto")) { String address = data.replace("smsto:", "").replace("mmsto:", ""); threadId = Utils.getThreadId(this, formatPhoneNumber(address)); } else if (scheme.startsWith("sms") || (scheme.startsWith("mms"))) { String address = data.replace("sms:", "").replace("mms:", ""); threadId = Utils.getThreadId(this, formatPhoneNumber(address)); } shouldOpenConversation = shouldOpenConversation || scheme.startsWith("sms") || scheme.startsWith("mms"); } // If it has a thread id, then we know it's from a notification and we can set the // conversation. if (threadId != -1) { Log.v(TAG, "Opening thread: " + threadId); setConversation(threadId); mSlidingMenu.showContent(); if (shouldOpenConversation) { intent.setClass(this, MessageListActivity.class); startActivity(intent); } // Otherwise we'll just resume what was previously there, which doesn't require any code. } private String formatPhoneNumber(String address) { address = URLDecoder.decode(address); address = "" + Html.fromHtml(address); address = PhoneNumberUtils.formatNumber(address); return address; } private void beginMmsSetup() { Loading Loading @@ -458,104 +355,6 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL } } public void switchContent(ContentFragment fragment, boolean animate) { // Make sure that the activity isn't destroyed before making fragment transactions. if (fragment != null && !mIsDestroyed) { KeyboardUtils.hide(this); mContent = fragment; FragmentManager m = getFragmentManager(); // Only do a replace if it is a different fragment. if (fragment != m.findFragmentById(R.id.content_frame)) { getFragmentManager() .beginTransaction() .replace(R.id.content_frame, (Fragment) fragment) .commitAllowingStateLoss(); } mSlidingMenu.showContent(animate); invalidateOptionsMenu(); } else { Log.w(TAG, "Null fragment, can't switch content"); } } public void setConversation(long threadId) { setConversation(threadId, -1, null, false); } public void setConversation(long threadId, long rowId) { setConversation(threadId, rowId, null, false); } public void setConversation(long threadId, long rowId, String pattern) { setConversation(threadId, rowId, pattern, false); } public void setConversation(long threadId, long rowId, String pattern, boolean animate) { MessageListFragment fragment = MessageListFragment.getInstance(threadId, rowId, pattern, !animate); // Save the thread ID here and switch the content sThreadShowing = threadId; switchContent(fragment, animate); } @Override public void onOpen() { invalidateOptionsMenu(); sThreadShowing = 0; // Notify the content that it is being closed, since the menu (i.e. conversation list) is being opened. if (mContent != null) mContent.onContentClosing(); // Hide the soft keyboard KeyboardUtils.hide(this, getCurrentFocus()); showBackButton(false); } @Override public void onClose() { invalidateOptionsMenu(); // Notify the content that it is being opened, since the menu (i.e. conversation list) is being closed. if (mContent != null) { mContent.onContentOpening(); } if (mContent != null && mContent instanceof MessageListFragment) { sThreadShowing = ((MessageListFragment) mContent).getThreadId(); } else { sThreadShowing = 0; } // Hide the soft keyboard KeyboardUtils.hide(this, getCurrentFocus()); showBackButton(true); } @Override public void onOpened() { // When the menu (i.e. the conversation list) has been opened, the content has been opened. // So notify the content fragment. if (mContent != null) mContent.onContentClosed(); } @Override public void onClosed() { // When the menu (i.e. the conversation list) has been closed, the content has been opened. // So notify the content fragment. if (mContent != null && ((Fragment) mContent).isAdded()) mContent.onContentOpened(); } @Override public void onChanging(float percentOpen) { if (mContent != null) mContent.onMenuChanging(percentOpen); } /** * Build and show the proper delete thread dialog. The UI is slightly different * depending on whether there are locked messages in the thread(s) and whether we're Loading Loading
QKSMS/src/main/AndroidManifest.xml +17 −2 Original line number Diff line number Diff line Loading @@ -68,9 +68,8 @@ android:name=".ui.MainActivity" android:icon="@mipmap/ic_launcher_teal" android:label="@string/app_name" android:launchMode="singleTask" android:logo="@color/transparent" android:windowSoftInputMode="stateUnchanged|adjustResize"> android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.MAIN" /> Loading @@ -81,6 +80,8 @@ <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> <data android:scheme="mms" /> Loading @@ -88,6 +89,20 @@ <data android:scheme="sms_body" /> </intent-filter> </activity> <activity android:name=".ui.messagelist.MessageListActivity" android:launchMode="singleTop" android:windowSoftInputMode="adjustResize" /> <activity android:name=".ui.settings.SettingsActivity" android:windowSoftInputMode="adjustResize" /> <activity android:name=".ui.search.SearchActivity" android:windowSoftInputMode="adjustResize" /> <activity android:name=".ui.compose.ComposeActivity" android:windowSoftInputMode="adjustResize" /> <activity-alias android:name=".ui.MainActivity-Teal" Loading
QKSMS/src/main/java/com/moez/QKSMS/common/DialogHelper.java +5 −2 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import com.moez.QKSMS.ui.MainActivity; import com.moez.QKSMS.ui.base.QKActivity; import com.moez.QKSMS.ui.dialog.DefaultSmsHelper; import com.moez.QKSMS.ui.dialog.QKDialog; import com.moez.QKSMS.ui.messagelist.MessageListActivity; import java.text.ParseException; import java.text.SimpleDateFormat; Loading @@ -30,7 +31,7 @@ public class DialogHelper { showDeleteConversationsDialog(context, threadIds); } public static void showDeleteConversationsDialog(final MainActivity context, final Set<Long> threadIds) { public static void showDeleteConversationsDialog(final QKActivity context, final Set<Long> threadIds) { new DefaultSmsHelper(context, R.string.not_default_delete).showIfNotDefault(null); Set<Long> threads = new HashSet<>(threadIds); // Make a copy so the list isn't reset when multi-select is disabled Loading @@ -43,7 +44,9 @@ public class DialogHelper { Conversation.ConversationQueryHandler handler = new Conversation.ConversationQueryHandler(context.getContentResolver()); Conversation.startDelete(handler, 0, false, threads); Conversation.asyncDeleteObsoleteThreads(handler, 0); context.showMenu(); if (context instanceof MessageListActivity) { context.onBackPressed(); } }) .setNegativeButton(R.string.cancel, null) .show(); Loading
QKSMS/src/main/java/com/moez/QKSMS/enums/QKPreference.java +0 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ public enum QKPreference { AVATAR_RECEIVED("pref_key_avatar_received", true), MESSAGE_COUNT("pref_key_message_count", false), SLIDING_TAB("pref_key_sliding_tab", false), TIMESTAMPS_24H("pref_key_24h", false), // General Loading
QKSMS/src/main/java/com/moez/QKSMS/transaction/NotificationManager.java +4 −3 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.moez.QKSMS.receiver.WearableIntentReceiver; import com.moez.QKSMS.ui.MainActivity; import com.moez.QKSMS.ui.ThemeManager; import com.moez.QKSMS.ui.messagelist.MessageItem; import com.moez.QKSMS.ui.messagelist.MessageListActivity; import com.moez.QKSMS.ui.popup.QKComposeActivity; import com.moez.QKSMS.ui.popup.QKReplyActivity; import com.moez.QKSMS.ui.settings.SettingsFragment; Loading Loading @@ -316,7 +317,7 @@ public class NotificationManager { if (failedCursor.getCount() == 1) { title = sRes.getString(R.string.failed_message); Intent intent = new Intent(context, MainActivity.class); intent.putExtra(MainActivity.EXTRA_THREAD_ID, failedCursor.getLong(0)); intent.putExtra(MessageListActivity.ARG_THREAD_ID, failedCursor.getLong(0)); PI = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); } else { title = failedCursor.getCount() + " " + sRes.getString(R.string.failed_messages); Loading Loading @@ -475,7 +476,7 @@ public class NotificationManager { final PendingIntent replyPI = PendingIntent.getActivity(context, buildRequestCode(threadId, 0), replyIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent threadIntent = new Intent(context, MainActivity.class); threadIntent.putExtra(MainActivity.EXTRA_THREAD_ID, threadId); threadIntent.putExtra(MessageListActivity.ARG_THREAD_ID, threadId); final PendingIntent threadPI = PendingIntent.getActivity(context, buildRequestCode(threadId, 1), threadIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent readIntent = new Intent(ACTION_MARK_READ); Loading Loading @@ -575,7 +576,7 @@ public class NotificationManager { PendingIntent replyPI = PendingIntent.getActivity(context, buildRequestCode(threadId, 0), replyIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent threadIntent = new Intent(context, MainActivity.class); threadIntent.putExtra(MainActivity.EXTRA_THREAD_ID, threadId); threadIntent.putExtra(MessageListActivity.ARG_THREAD_ID, threadId); PendingIntent threadPI = PendingIntent.getActivity(context, buildRequestCode(threadId, 1), threadIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent readIntent = new Intent(ACTION_MARK_READ); Loading
QKSMS/src/main/java/com/moez/QKSMS/ui/MainActivity.java +20 −221 Original line number Diff line number Diff line Loading @@ -14,10 +14,7 @@ import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.support.v4.content.ContextCompat; import android.telephony.PhoneNumberUtils; import android.text.Html; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; Loading @@ -30,45 +27,37 @@ import butterknife.ButterKnife; import com.google.android.mms.pdu_alt.PduHeaders; import com.moez.QKSMS.R; import com.moez.QKSMS.common.ConversationPrefsHelper; import com.moez.QKSMS.common.DialogHelper; import com.moez.QKSMS.common.DonationManager; import com.moez.QKSMS.common.LiveViewManager; import com.moez.QKSMS.common.QKRateSnack; import com.moez.QKSMS.common.google.DraftCache; import com.moez.QKSMS.common.utils.KeyboardUtils; import com.moez.QKSMS.common.utils.MessageUtils; import com.moez.QKSMS.common.utils.Units; import com.moez.QKSMS.data.Conversation; import com.moez.QKSMS.enums.QKPreference; import com.moez.QKSMS.mmssms.Utils; import com.moez.QKSMS.receiver.IconColorReceiver; import com.moez.QKSMS.transaction.NotificationManager; import com.moez.QKSMS.transaction.SmsHelper; import com.moez.QKSMS.ui.base.QKActivity; import com.moez.QKSMS.ui.compose.ComposeFragment; import com.moez.QKSMS.ui.conversationlist.ConversationListFragment; import com.moez.QKSMS.ui.dialog.ConversationSettingsDialog; import com.moez.QKSMS.ui.dialog.DefaultSmsHelper; import com.moez.QKSMS.ui.dialog.QKDialog; import com.moez.QKSMS.ui.dialog.mms.MMSSetupFragment; import com.moez.QKSMS.ui.messagelist.MessageListActivity; import com.moez.QKSMS.ui.messagelist.MessageListFragment; import com.moez.QKSMS.ui.popup.QKReplyActivity; import com.moez.QKSMS.ui.search.SearchFragment; import com.moez.QKSMS.ui.search.SearchActivity; import com.moez.QKSMS.ui.settings.SettingsFragment; import com.moez.QKSMS.ui.view.slidingmenu.SlidingMenu; import com.moez.QKSMS.ui.welcome.WelcomeActivity; import org.ligi.snackengage.SnackEngage; import org.ligi.snackengage.snacks.BaseSnack; import java.net.URLDecoder; import java.util.Collection; public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuListener { public class MainActivity extends QKActivity { private final String TAG = "MainActivity"; public final static String EXTRA_THREAD_ID = "thread_id"; public static long sThreadShowing; private static final int THREAD_LIST_QUERY_TOKEN = 1701; Loading @@ -80,7 +69,6 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL public static final String MMS_SETUP_DONT_ASK_AGAIN = "mmsSetupDontAskAgain"; @Bind(R.id.root) View mRoot; @Bind(R.id.sliding_menu) SlidingMenu mSlidingMenu; private ConversationListFragment mConversationList; private ContentFragment mContent; Loading @@ -97,37 +85,21 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); launchWelcomeActivity(); onNewIntent(getIntent()); setContentView(R.layout.activity_main); setContentView(R.layout.activity_fragment); setTitle(R.string.title_conversation_list); ButterKnife.bind(this); setSlidingTabEnabled(mPrefs.getBoolean(SettingsFragment.SLIDING_TAB, false)); mSlidingMenu.setListener(this); mSlidingMenu.setContent(); mSlidingMenu.setMenu(); mSlidingMenu.showContent(false); mSlidingMenu.showMenu(false); FragmentManager fm = getFragmentManager(); mConversationList = (ConversationListFragment) fm.findFragmentById(R.id.menu_frame); mConversationList = (ConversationListFragment) fm.findFragmentById(R.id.content_frame); if (mConversationList == null) { mConversationList = new ConversationListFragment(); } FragmentTransaction menuTransaction = fm.beginTransaction(); menuTransaction.replace(R.id.menu_frame, mConversationList); menuTransaction.replace(R.id.content_frame, mConversationList); menuTransaction.commit(); mContent = (ContentFragment) fm.findFragmentById(R.id.content_frame); if (mContent == null) { mContent = ComposeFragment.getInstance(null); } FragmentTransaction contentTransaction = fm.beginTransaction(); contentTransaction.replace(R.id.content_frame, (Fragment) mContent); contentTransaction.commit(); onNewIntent(getIntent()); showDialogIfNeeded(savedInstanceState); LiveViewManager.registerView(QKPreference.BACKGROUND, this, key -> { Loading Loading @@ -192,39 +164,13 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL startActivityForResult(welcomeIntent, WelcomeActivity.WELCOME_REQUEST_CODE); } public void showMenu() { mSlidingMenu.showMenu(); } public SlidingMenu getSlidingMenu() { return mSlidingMenu; } /** * Configured the sliding menu view to peek the content or not. * * @param slidingTabEnabled true to peek the content */ public void setSlidingTabEnabled(boolean slidingTabEnabled) { if (slidingTabEnabled) { mSlidingMenu.setBehindOffset(Units.dpToPx(this, 48)); } else { mSlidingMenu.setBehindOffset(0); } } @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); menu.clear(); if (mSlidingMenu.isMenuShowing() || mContent == null) { showBackButton(false); mConversationList.inflateToolbar(menu, inflater, this); } else { showBackButton(true); mContent.inflateToolbar(menu, inflater, this); } return super.onPrepareOptionsMenu(menu); } Loading @@ -238,19 +184,10 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL switch (item.getItemId()) { case android.R.id.home: onKeyUp(KeyEvent.KEYCODE_BACK, null); break; case R.id.menu_settings: switchContent(SettingsFragment.newInstance(R.xml.settings_main), true); break; return true; case R.id.menu_search: switchContent(new SearchFragment(), true); break; case R.id.menu_changelog: DialogHelper.showChangelog(this); break; case R.id.menu_donate: DonationManager.getInstance(this).showDonateDialog(); break; startActivity(SearchActivity.class); return true; } return super.onOptionsItemSelected(item); Loading Loading @@ -306,23 +243,12 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (!mSlidingMenu.isMenuShowing()) { Fragment category = getFragmentManager().findFragmentByTag(SettingsFragment.CATEGORY_TAG); if (category != null) { getFragmentManager().beginTransaction() .replace(R.id.content_frame, SettingsFragment.newInstance(R.xml.settings_main)).commit(); } else { mSlidingMenu.showMenu(); } return true; } else { if (mConversationList.isShowingBlocked()) { mConversationList.setShowingBlocked(false); } else { finish(); } } } return false; } Loading @@ -331,9 +257,6 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL protected void onPause() { super.onPause(); sThreadShowing = 0; if (!mSlidingMenu.isMenuShowing()) { mContent.onContentClosed(); } } @Override Loading @@ -353,10 +276,6 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL protected void onResume() { super.onResume(); if (!mSlidingMenu.isMenuShowing()) { mContent.onContentOpened(); } if (mContent != null && mContent instanceof MessageListFragment) { sThreadShowing = ((MessageListFragment) mContent).getThreadId(); QKReplyActivity.dismiss(sThreadShowing); Loading Loading @@ -386,41 +305,19 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL // that makes the most sense. setIntent(intent); // This method is called whenever a MainActivity intent is started. Sometimes this is from a // notification; other times it's from the user clicking on the app icon in the home screen long threadId = intent.getLongExtra(EXTRA_THREAD_ID, -1); boolean shouldOpenConversation = intent.hasExtra(MessageListActivity.ARG_THREAD_ID); // The activity can also be launched by clicking on the message button from the contacts app // Check for {sms,mms}{,to}: schemes, in which case we know to open a conversation if (intent.getData() != null) { String data = intent.getData().toString(); String scheme = intent.getData().getScheme(); if (scheme.startsWith("smsto") || scheme.startsWith("mmsto")) { String address = data.replace("smsto:", "").replace("mmsto:", ""); threadId = Utils.getThreadId(this, formatPhoneNumber(address)); } else if (scheme.startsWith("sms") || (scheme.startsWith("mms"))) { String address = data.replace("sms:", "").replace("mms:", ""); threadId = Utils.getThreadId(this, formatPhoneNumber(address)); } shouldOpenConversation = shouldOpenConversation || scheme.startsWith("sms") || scheme.startsWith("mms"); } // If it has a thread id, then we know it's from a notification and we can set the // conversation. if (threadId != -1) { Log.v(TAG, "Opening thread: " + threadId); setConversation(threadId); mSlidingMenu.showContent(); if (shouldOpenConversation) { intent.setClass(this, MessageListActivity.class); startActivity(intent); } // Otherwise we'll just resume what was previously there, which doesn't require any code. } private String formatPhoneNumber(String address) { address = URLDecoder.decode(address); address = "" + Html.fromHtml(address); address = PhoneNumberUtils.formatNumber(address); return address; } private void beginMmsSetup() { Loading Loading @@ -458,104 +355,6 @@ public class MainActivity extends QKActivity implements SlidingMenu.SlidingMenuL } } public void switchContent(ContentFragment fragment, boolean animate) { // Make sure that the activity isn't destroyed before making fragment transactions. if (fragment != null && !mIsDestroyed) { KeyboardUtils.hide(this); mContent = fragment; FragmentManager m = getFragmentManager(); // Only do a replace if it is a different fragment. if (fragment != m.findFragmentById(R.id.content_frame)) { getFragmentManager() .beginTransaction() .replace(R.id.content_frame, (Fragment) fragment) .commitAllowingStateLoss(); } mSlidingMenu.showContent(animate); invalidateOptionsMenu(); } else { Log.w(TAG, "Null fragment, can't switch content"); } } public void setConversation(long threadId) { setConversation(threadId, -1, null, false); } public void setConversation(long threadId, long rowId) { setConversation(threadId, rowId, null, false); } public void setConversation(long threadId, long rowId, String pattern) { setConversation(threadId, rowId, pattern, false); } public void setConversation(long threadId, long rowId, String pattern, boolean animate) { MessageListFragment fragment = MessageListFragment.getInstance(threadId, rowId, pattern, !animate); // Save the thread ID here and switch the content sThreadShowing = threadId; switchContent(fragment, animate); } @Override public void onOpen() { invalidateOptionsMenu(); sThreadShowing = 0; // Notify the content that it is being closed, since the menu (i.e. conversation list) is being opened. if (mContent != null) mContent.onContentClosing(); // Hide the soft keyboard KeyboardUtils.hide(this, getCurrentFocus()); showBackButton(false); } @Override public void onClose() { invalidateOptionsMenu(); // Notify the content that it is being opened, since the menu (i.e. conversation list) is being closed. if (mContent != null) { mContent.onContentOpening(); } if (mContent != null && mContent instanceof MessageListFragment) { sThreadShowing = ((MessageListFragment) mContent).getThreadId(); } else { sThreadShowing = 0; } // Hide the soft keyboard KeyboardUtils.hide(this, getCurrentFocus()); showBackButton(true); } @Override public void onOpened() { // When the menu (i.e. the conversation list) has been opened, the content has been opened. // So notify the content fragment. if (mContent != null) mContent.onContentClosed(); } @Override public void onClosed() { // When the menu (i.e. the conversation list) has been closed, the content has been opened. // So notify the content fragment. if (mContent != null && ((Fragment) mContent).isAdded()) mContent.onContentOpened(); } @Override public void onChanging(float percentOpen) { if (mContent != null) mContent.onMenuChanging(percentOpen); } /** * Build and show the proper delete thread dialog. The UI is slightly different * depending on whether there are locked messages in the thread(s) and whether we're Loading