mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-17 04:00:48 +01:00
fixed account migration
This commit is contained in:
parent
ed4e1540e0
commit
a9f6cc5229
@ -203,7 +203,6 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
|
||||
int TABLE_ID_CACHED_STATUSES = 62;
|
||||
int TABLE_ID_CACHED_HASHTAGS = 63;
|
||||
int TABLE_ID_CACHED_RELATIONSHIPS = 64;
|
||||
int VIRTUAL_TABLE_ID_DATABASE_READY = 100;
|
||||
int VIRTUAL_TABLE_ID_NOTIFICATIONS = 101;
|
||||
int VIRTUAL_TABLE_ID_PREFERENCES = 102;
|
||||
int VIRTUAL_TABLE_ID_ALL_PREFERENCES = 103;
|
||||
@ -220,7 +219,9 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
|
||||
int VIRTUAL_TABLE_ID_SUGGESTIONS_AUTO_COMPLETE = 141;
|
||||
int VIRTUAL_TABLE_ID_SUGGESTIONS_SEARCH = 142;
|
||||
|
||||
int VIRTUAL_TABLE_ID_EMPTY = 200;
|
||||
int VIRTUAL_TABLE_ID_NULL = 200;
|
||||
int VIRTUAL_TABLE_ID_EMPTY = 201;
|
||||
int VIRTUAL_TABLE_ID_DATABASE_PREPARE = 203;
|
||||
|
||||
int VIRTUAL_TABLE_ID_RAW_QUERY = 300;
|
||||
|
||||
|
@ -51,7 +51,7 @@ public interface TwidereDataStore {
|
||||
|
||||
String CONTENT_PATH_RAW_QUERY = "raw_query";
|
||||
|
||||
String CONTENT_PATH_DATABASE_READY = "database_ready";
|
||||
String CONTENT_PATH_DATABASE_PREPARE = "database_prepare";
|
||||
|
||||
Uri BASE_CONTENT_URI = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
|
||||
.authority(AUTHORITY).build();
|
||||
@ -62,8 +62,8 @@ public interface TwidereDataStore {
|
||||
|
||||
Uri CONTENT_URI_RAW_QUERY = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH_RAW_QUERY);
|
||||
|
||||
Uri CONTENT_URI_DATABASE_READY = Uri.withAppendedPath(BASE_CONTENT_URI,
|
||||
CONTENT_PATH_DATABASE_READY);
|
||||
Uri CONTENT_URI_DATABASE_PREPARE = Uri.withAppendedPath(BASE_CONTENT_URI,
|
||||
CONTENT_PATH_DATABASE_PREPARE);
|
||||
|
||||
Uri[] STATUSES_URIS = new Uri[]{Statuses.CONTENT_URI, CachedStatuses.CONTENT_URI};
|
||||
Uri[] CACHE_URIS = new Uri[]{CachedUsers.CONTENT_URI, CachedStatuses.CONTENT_URI,
|
||||
|
@ -139,6 +139,7 @@ import org.mariotaku.twidere.util.UriExtraUtils;
|
||||
import org.mariotaku.twidere.util.UserColorNameManager;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.collection.CompactHashSet;
|
||||
import org.mariotaku.twidere.util.content.TwidereSQLiteOpenHelper;
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper;
|
||||
import org.mariotaku.twidere.util.media.preview.PreviewMediaExtractor;
|
||||
import org.mariotaku.twidere.util.net.TwidereDns;
|
||||
@ -659,10 +660,9 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
final String table = DataStoreUtils.getTableNameById(tableId);
|
||||
checkReadPermission(tableId, table, projection);
|
||||
switch (tableId) {
|
||||
case VIRTUAL_TABLE_ID_DATABASE_READY: {
|
||||
if (mDatabaseWrapper.isReady())
|
||||
return new MatrixCursor(projection != null ? projection : new String[0]);
|
||||
return null;
|
||||
case VIRTUAL_TABLE_ID_DATABASE_PREPARE: {
|
||||
mDatabaseWrapper.prepare();
|
||||
return new MatrixCursor(projection != null ? projection : new String[0]);
|
||||
}
|
||||
case VIRTUAL_TABLE_ID_PERMISSIONS: {
|
||||
final Context context = getContext();
|
||||
@ -779,6 +779,9 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
case VIRTUAL_TABLE_ID_SUGGESTIONS_SEARCH: {
|
||||
return getSearchSuggestionCursor(uri);
|
||||
}
|
||||
case VIRTUAL_TABLE_ID_NULL: {
|
||||
return null;
|
||||
}
|
||||
case VIRTUAL_TABLE_ID_EMPTY: {
|
||||
return new MatrixCursor(projection);
|
||||
}
|
||||
@ -801,7 +804,8 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
|
||||
private Cursor getSearchSuggestionCursor(Uri uri) {
|
||||
final String query = uri.getQueryParameter(QUERY_PARAM_QUERY);
|
||||
final UserKey accountKey = UserKey.valueOf(uri.getQueryParameter(QUERY_PARAM_ACCOUNT_KEY));
|
||||
final String paramAccountKey = uri.getQueryParameter(QUERY_PARAM_ACCOUNT_KEY);
|
||||
final UserKey accountKey = paramAccountKey != null ? UserKey.valueOf(paramAccountKey) : null;
|
||||
if (query == null || accountKey == null) return null;
|
||||
final boolean emptyQuery = TextUtils.isEmpty(query);
|
||||
final String queryEscaped = query.replace("_", "^_");
|
||||
|
@ -185,8 +185,6 @@ public class DataStoreUtils implements Constants {
|
||||
VIRTUAL_TABLE_ID_UNREAD_COUNTS);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, UnreadCounts.ByType.CONTENT_PATH + "/*",
|
||||
VIRTUAL_TABLE_ID_UNREAD_COUNTS_BY_TYPE);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, TwidereDataStore.CONTENT_PATH_DATABASE_READY,
|
||||
VIRTUAL_TABLE_ID_DATABASE_READY);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, CachedUsers.CONTENT_PATH_WITH_RELATIONSHIP + "/*",
|
||||
VIRTUAL_TABLE_ID_CACHED_USERS_WITH_RELATIONSHIP);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, CachedUsers.CONTENT_PATH_WITH_SCORE + "/*",
|
||||
@ -201,6 +199,10 @@ public class DataStoreUtils implements Constants {
|
||||
VIRTUAL_TABLE_ID_SUGGESTIONS_AUTO_COMPLETE);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, Suggestions.Search.CONTENT_PATH,
|
||||
VIRTUAL_TABLE_ID_SUGGESTIONS_SEARCH);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, TwidereDataStore.CONTENT_PATH_DATABASE_PREPARE,
|
||||
VIRTUAL_TABLE_ID_DATABASE_PREPARE);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, TwidereDataStore.CONTENT_PATH_NULL,
|
||||
VIRTUAL_TABLE_ID_NULL);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, TwidereDataStore.CONTENT_PATH_EMPTY,
|
||||
VIRTUAL_TABLE_ID_EMPTY);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, TwidereDataStore.CONTENT_PATH_RAW_QUERY + "/*",
|
||||
@ -1014,6 +1016,11 @@ public class DataStoreUtils implements Constants {
|
||||
}
|
||||
}
|
||||
|
||||
public static void prepareDatabase(@NonNull Context context) {
|
||||
context.getContentResolver().query(TwidereDataStore.CONTENT_URI_DATABASE_PREPARE, null,
|
||||
null, null, null);
|
||||
}
|
||||
|
||||
interface FieldArrayCreator<T> {
|
||||
T newArray(int size);
|
||||
|
||||
|
@ -60,9 +60,8 @@ public class SQLiteDatabaseWrapper {
|
||||
mDatabase.execSQL(sql, bindArgs);
|
||||
}
|
||||
|
||||
public boolean isReady() {
|
||||
if (mLazyLoadCallback != null) return true;
|
||||
return mDatabase != null;
|
||||
public void prepare() {
|
||||
tryCreateDatabase();
|
||||
}
|
||||
|
||||
public Cursor query(final String table, final String[] columns, final String selection,
|
||||
|
@ -337,7 +337,6 @@ public final class Utils implements Constants {
|
||||
return colors;
|
||||
}
|
||||
|
||||
|
||||
public static class NoAccountException extends Exception {
|
||||
String accountHost;
|
||||
|
||||
@ -559,7 +558,8 @@ public final class Utils implements Constants {
|
||||
if (context == null) return null;
|
||||
final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME,
|
||||
Context.MODE_PRIVATE);
|
||||
UserKey accountKey = UserKey.valueOf(prefs.getString(KEY_DEFAULT_ACCOUNT_KEY, null));
|
||||
final String string = prefs.getString(KEY_DEFAULT_ACCOUNT_KEY, null);
|
||||
UserKey accountKey = string != null ? UserKey.valueOf(string) : null;
|
||||
final UserKey[] accountKeys = DataStoreUtils.getAccountKeys(context);
|
||||
int idMatchIdx = -1;
|
||||
for (int i = 0, accountIdsLength = accountKeys.length; i < accountIdsLength; i++) {
|
||||
|
@ -93,7 +93,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
private var tabColumns: Int = 0
|
||||
|
||||
|
||||
private var multiSelectHandler: MultiSelectEventHandler? = null
|
||||
private lateinit var multiSelectHandler: MultiSelectEventHandler
|
||||
|
||||
private var pagerAdapter: SupportTabsAdapter? = null
|
||||
|
||||
@ -145,8 +145,8 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
|
||||
override fun triggerRefresh(position: Int): Boolean {
|
||||
val f = pagerAdapter!!.instantiateItem(mainPager, position) as Fragment
|
||||
if (f !is RefreshScrollTopInterface) return false
|
||||
if (f.activity == null || f.isDetached) return false
|
||||
if (f !is RefreshScrollTopInterface) return false
|
||||
return f.triggerRefresh()
|
||||
}
|
||||
|
||||
@ -298,7 +298,8 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
multiSelectHandler = MultiSelectEventHandler(this)
|
||||
multiSelectHandler!!.dispatchOnCreate()
|
||||
multiSelectHandler.dispatchOnCreate()
|
||||
DataStoreUtils.prepareDatabase(this)
|
||||
if (!DataStoreUtils.hasAccount(this)) {
|
||||
val signInIntent = Intent(INTENT_ACTION_TWITTER_LOGIN)
|
||||
signInIntent.setClass(this, SignInActivity::class.java)
|
||||
@ -347,7 +348,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
drawerToggleButton.visibility = View.GONE
|
||||
}
|
||||
|
||||
homeContent!!.addOnLayoutChangeListener { v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom ->
|
||||
homeContent.addOnLayoutChangeListener { v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom ->
|
||||
if (top != oldTop) {
|
||||
val fragment = leftDrawerFragment
|
||||
if (fragment is AccountsDashboardFragment) {
|
||||
@ -388,7 +389,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
multiSelectHandler!!.dispatchOnStart()
|
||||
multiSelectHandler.dispatchOnStart()
|
||||
val resolver = contentResolver
|
||||
resolver.registerContentObserver(Accounts.CONTENT_URI, true, accountChangeObserver)
|
||||
bus.register(this)
|
||||
@ -408,7 +409,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
multiSelectHandler!!.dispatchOnStop()
|
||||
multiSelectHandler.dispatchOnStop()
|
||||
readStateManager.unregisterOnSharedPreferenceChangeListener(readStateChangeListener)
|
||||
bus.unregister(this)
|
||||
val resolver = contentResolver
|
||||
|
@ -19,14 +19,13 @@
|
||||
|
||||
package org.mariotaku.twidere.activity
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.BuildConfig
|
||||
import org.mariotaku.twidere.util.StrictModeUtils
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
open class MainActivity : Activity() {
|
||||
open class MainActivity : BaseActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
@ -34,14 +33,15 @@ open class MainActivity : Activity() {
|
||||
StrictModeUtils.detectAllThreadPolicy()
|
||||
}
|
||||
super.onCreate(savedInstanceState)
|
||||
if (Utils.checkDeviceCompatible()) {
|
||||
val intent = Intent(this, HomeActivity::class.java)
|
||||
if (!Utils.checkDeviceCompatible()) {
|
||||
val intent = Intent(this, IncompatibleAlertActivity::class.java)
|
||||
startActivity(intent)
|
||||
} else {
|
||||
val intent = Intent(this, IncompatibleAlertActivity::class.java)
|
||||
val intent = Intent(this, HomeActivity::class.java)
|
||||
startActivity(intent)
|
||||
}
|
||||
finish()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -118,12 +118,23 @@ class AccountsDashboardFragment : BaseSupportFragment(), LoaderCallbacks<Account
|
||||
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
|
||||
val adapter = accountsAdapter ?: return
|
||||
val pagePosition = position + positionOffset
|
||||
hasPrevAccountIndicator.alpha = TwidereMathUtils.clamp(pagePosition, 0f, 1f)
|
||||
hasNextAccountIndicator.alpha = TwidereMathUtils.clamp(adapter.count - (pagePosition
|
||||
+ 1 / adapter.getPageWidth(position)), 0f, 1f)
|
||||
val pageCount = adapter.count
|
||||
val visiblePages = 1 / adapter.getPageWidth(position)
|
||||
if (pageCount < visiblePages) {
|
||||
hasPrevAccountIndicator.alpha = 0f
|
||||
hasNextAccountIndicator.alpha = 0f
|
||||
} else {
|
||||
hasPrevAccountIndicator.alpha = TwidereMathUtils.clamp(pagePosition, 0f, 1f)
|
||||
hasNextAccountIndicator.alpha = TwidereMathUtils.clamp(pageCount - (pagePosition
|
||||
+ visiblePages), 0f, 1f)
|
||||
}
|
||||
}
|
||||
})
|
||||
accountsSelector.setPageTransformer(false, AccountsSelectorTransformer)
|
||||
|
||||
hasPrevAccountIndicator.alpha = 0f
|
||||
hasNextAccountIndicator.alpha = 0f
|
||||
|
||||
val menuInflater = SupportMenuInflater(context)
|
||||
menuInflater.inflate(R.menu.action_dashboard_timeline_toggle, accountDashboardMenu.menu)
|
||||
accountDashboardMenu.setOnMenuItemClickListener(OnMenuItemClickListener { item ->
|
||||
|
@ -23,20 +23,26 @@ import android.app.Dialog
|
||||
import android.app.ProgressDialog
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.FragmentManager
|
||||
import org.mariotaku.ktextension.Bundle
|
||||
import org.mariotaku.ktextension.set
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_MESSAGE
|
||||
|
||||
class ProgressDialogFragment : BaseDialogFragment() {
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val dialog = ProgressDialog(activity)
|
||||
dialog.setMessage(getString(R.string.please_wait))
|
||||
dialog.setMessage(arguments?.getString(EXTRA_MESSAGE) ?: getString(R.string.please_wait))
|
||||
return dialog
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
fun show(fm: FragmentManager, tag: String): ProgressDialogFragment {
|
||||
fun show(fm: FragmentManager, tag: String, message: String? = null): ProgressDialogFragment {
|
||||
val f = ProgressDialogFragment()
|
||||
f.arguments = Bundle {
|
||||
this[EXTRA_MESSAGE] = message
|
||||
}
|
||||
f.show(fm, tag)
|
||||
return f
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
package org.mariotaku.twidere.model.message
|
||||
|
||||
object DatabaseReadyEvent {
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user