Search in sources :

Example 1 with AccessToken

use of com.github.moko256.twicalico.entity.AccessToken in project twicalico by moko256.

the class SettingsFragment method onActivityCreated.

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    String preferenceRoot = getArguments() != null ? getArguments().getString(ARG_PREFERENCE_ROOT, null) : null;
    if (preferenceRoot == null) {
        SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
        TokenSQLiteOpenHelper helper = new TokenSQLiteOpenHelper(getContext());
        AccessToken[] accessTokens = helper.getAccessTokens();
        CharSequence[] entries = new CharSequence[accessTokens.length + 1];
        CharSequence[] entryValues = new CharSequence[accessTokens.length + 1];
        for (int i = 0; i < accessTokens.length; i++) {
            AccessToken accessToken = accessTokens[i];
            entries[i] = TwitterStringUtils.plusAtMark(accessToken.getScreenName(), accessToken.getUrl());
            entryValues[i] = accessToken.getKeyString();
        }
        entries[entries.length - 1] = getString(R.string.add_account);
        entryValues[entryValues.length - 1] = "-1";
        ListPreference nowAccountList = (ListPreference) findPreference("AccountKey");
        nowAccountList.setEntries(entries);
        nowAccountList.setEntryValues(entryValues);
        nowAccountList.setDefaultValue(defaultSharedPreferences.getString("AccountKey", "-1"));
        nowAccountList.setOnPreferenceChangeListener((preference, newValue) -> {
            if (newValue.equals("-1")) {
                GlobalApplication.twitter = null;
                startActivity(new Intent(getContext(), OAuthActivity.class));
            } else {
                TokenSQLiteOpenHelper tokenOpenHelper = new TokenSQLiteOpenHelper(this.getContext());
                AccessToken accessToken = tokenOpenHelper.getAccessToken((String) newValue);
                tokenOpenHelper.close();
                ((GlobalApplication) getActivity().getApplication()).initTwitter(accessToken);
                startActivity(new Intent(getContext(), MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
            }
            return true;
        });
        findPreference("logout").setOnPreferenceClickListener(preference -> {
            new AlertDialog.Builder(getContext()).setMessage(R.string.confirm_logout).setCancelable(true).setPositiveButton(R.string.do_logout, (dialog, i) -> {
                helper.deleteAccessToken(helper.getAccessToken(defaultSharedPreferences.getString("AccountKey", "-1")));
                int point = helper.getSize() - 1;
                if (point != -1) {
                    AccessToken accessToken = helper.getAccessTokens()[point];
                    defaultSharedPreferences.edit().putString("AccountKey", accessToken.getKeyString()).apply();
                    ((GlobalApplication) getActivity().getApplication()).initTwitter(accessToken);
                    startActivity(new Intent(getContext(), MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
                } else {
                    defaultSharedPreferences.edit().putString("AccountKey", "-1").apply();
                    GlobalApplication.twitter = null;
                    startActivity(new Intent(getContext(), OAuthActivity.class));
                }
            }).setNeutralButton(R.string.back, (dialog, i) -> dialog.cancel()).show();
            return false;
        });
        ListPreference nowThemeMode = (ListPreference) findPreference("nightModeType");
        nowThemeMode.setOnPreferenceChangeListener((preference, newValue) -> {
            switch(String.valueOf(newValue)) {
                case "mode_night_no":
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    break;
                case "mode_night_auto":
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
                    break;
                case "mode_night_follow_system":
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
                    break;
                case "mode_night_yes":
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    break;
                default:
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
            }
            return true;
        });
        Preference causeError = findPreference("cause_error");
        causeError.setOnPreferenceClickListener(preference -> {
            getActivity().finish();
            throw new NullPointerException();
        });
        Preference licenseThisApp = findPreference("license_at_this_app");
        licenseThisApp.setOnPreferenceClickListener(preference -> {
            getContext().startActivity(new Intent(getContext(), LicensesActivity.class).putExtra("title", getResources().getText(R.string.app_name)).putExtra("library_name", "twicalico"));
            return true;
        });
        Preference sourceCodeLink = findPreference("source_code_link");
        sourceCodeLink.setOnPreferenceClickListener(preference -> {
            AppCustomTabsKt.launchChromeCustomTabs(getContext(), "https://github.com/moko256/twicalico");
            return false;
        });
        Preference version = findPreference("app_version");
        version.setSummary(BuildConfig.VERSION_NAME);
        version.setOnPreferenceClickListener(preference -> {
            Date birthday = new Date(1446956982000L);
            Toast.makeText(getContext(), getString(R.string.birthday_of_this_app_is, birthday) + "\n\n" + getString(R.string.age_of_this_app_is, (int) Math.floor((new Date().getTime() - birthday.getTime()) / (31557600000L))), Toast.LENGTH_LONG).show();
            return false;
        });
    } else if (preferenceRoot.equals("license")) {
        PreferenceScreen license = getPreferenceScreen();
        for (int i = 0, length = license.getPreferenceCount(); i < length; i++) {
            license.getPreference(i).setOnPreferenceClickListener(preference -> {
                getContext().startActivity(new Intent(getContext(), LicensesActivity.class).putExtra("title", preference.getTitle()).putExtra("library_name", // "license_lib_".length
                preference.getKey().substring(12)));
                return true;
            });
        }
    }
}
Also used : AlertDialog(android.support.v7.app.AlertDialog) Bundle(android.os.Bundle) AccessToken(com.github.moko256.twicalico.entity.AccessToken) PreferenceFragmentCompat(android.support.v7.preference.PreferenceFragmentCompat) Date(java.util.Date) ListPreference(android.support.v7.preference.ListPreference) Intent(android.content.Intent) TwitterStringUtils(com.github.moko256.twicalico.text.TwitterStringUtils) AppCompatDelegate(android.support.v7.app.AppCompatDelegate) Preference(android.support.v7.preference.Preference) PreferenceManager(android.support.v7.preference.PreferenceManager) AlertDialog(android.support.v7.app.AlertDialog) SharedPreferences(android.content.SharedPreferences) AppCustomTabsKt(com.github.moko256.twicalico.intent.AppCustomTabsKt) PreferenceScreen(android.support.v7.preference.PreferenceScreen) Toast(android.widget.Toast) TokenSQLiteOpenHelper(com.github.moko256.twicalico.database.TokenSQLiteOpenHelper) PreferenceScreen(android.support.v7.preference.PreferenceScreen) SharedPreferences(android.content.SharedPreferences) Intent(android.content.Intent) ListPreference(android.support.v7.preference.ListPreference) Date(java.util.Date) ListPreference(android.support.v7.preference.ListPreference) Preference(android.support.v7.preference.Preference) AccessToken(com.github.moko256.twicalico.entity.AccessToken) TokenSQLiteOpenHelper(com.github.moko256.twicalico.database.TokenSQLiteOpenHelper)

Example 2 with AccessToken

use of com.github.moko256.twicalico.entity.AccessToken in project twicalico by moko256.

the class TokenSQLiteOpenHelper method getAccessTokens.

public AccessToken[] getAccessTokens() {
    SQLiteDatabase database = getReadableDatabase();
    Cursor c = database.query(TABLE_NAME, TABLE_COLUMNS, null, null, null, null, null);
    AccessToken[] accessTokens = new AccessToken[c.getCount()];
    while (c.moveToNext()) {
        accessTokens[c.getPosition()] = convertFromCursor(c);
    }
    c.close();
    database.close();
    return accessTokens;
}
Also used : SQLiteDatabase(android.database.sqlite.SQLiteDatabase) AccessToken(com.github.moko256.twicalico.entity.AccessToken) Cursor(android.database.Cursor)

Example 3 with AccessToken

use of com.github.moko256.twicalico.entity.AccessToken in project twicalico by moko256.

the class TokenSQLiteOpenHelper method getAccessToken.

public AccessToken getAccessToken(String key) {
    Pair<String, Long> pair = AccessTokenKt.splitAccessTokenKey(key);
    SQLiteDatabase database = getReadableDatabase();
    Cursor c = database.query(TABLE_NAME, TABLE_COLUMNS, "url = '" + pair.getFirst() + "' AND " + "userId = " + String.valueOf(pair.getSecond()), null, null, null, null, "1");
    AccessToken accessToken;
    if (c.moveToNext()) {
        accessToken = convertFromCursor(c);
    } else {
        accessToken = null;
    }
    c.close();
    database.close();
    return accessToken;
}
Also used : SQLiteDatabase(android.database.sqlite.SQLiteDatabase) AccessToken(com.github.moko256.twicalico.entity.AccessToken) Cursor(android.database.Cursor)

Example 4 with AccessToken

use of com.github.moko256.twicalico.entity.AccessToken in project twicalico by moko256.

the class GlobalApplication method getTwitterInstance.

@NonNull
public Twitter getTwitterInstance(@NonNull AccessToken accessToken) {
    Twitter t;
    Configuration conf;
    if (accessToken.getType() == Type.TWITTER) {
        conf = new ConfigurationBuilder().setTweetModeExtended(true).setOAuthConsumerKey(BuildConfig.CONSUMER_KEY).setOAuthConsumerSecret(BuildConfig.CONSUMER_SECRET).setOAuthAccessToken(accessToken.getToken()).setOAuthAccessTokenSecret(accessToken.getTokenSecret()).build();
        t = twitterCache.get(conf);
        if (t == null) {
            t = new TwitterFactory(conf).getInstance();
            twitterCache.put(conf, t);
        }
    } else {
        conf = new ConfigurationBuilder().setOAuthAccessToken(accessToken.getToken()).setRestBaseURL(accessToken.getUrl()).build();
        t = twitterCache.get(conf);
        if (t == null) {
            t = new MastodonTwitterImpl(conf, accessToken.getUserId(), getOkHttpClient(conf.getHttpClientConfiguration()).newBuilder());
            twitterCache.put(conf, t);
        }
    }
    return t;
}
Also used : ConfigurationBuilder(twitter4j.conf.ConfigurationBuilder) AppConfiguration(com.github.moko256.twicalico.config.AppConfiguration) HttpClientConfiguration(twitter4j.HttpClientConfiguration) Configuration(twitter4j.conf.Configuration) Twitter(twitter4j.Twitter) TwitterFactory(twitter4j.TwitterFactory) MastodonTwitterImpl(com.github.moko256.mastodon.MastodonTwitterImpl) NonNull(android.support.annotation.NonNull)

Example 5 with AccessToken

use of com.github.moko256.twicalico.entity.AccessToken in project twicalico by moko256.

the class GlobalApplication method onCreate.

@Override
public void onCreate() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel("crash_log", getString(R.string.crash_log), NotificationManager.IMPORTANCE_DEFAULT);
        channel.setDescription(getString(R.string.crash_log_channel_description));
        channel.setLightColor(Color.RED);
        channel.enableLights(true);
        channel.setShowBadge(false);
        channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        if (manager != null) {
            manager.createNotificationChannel(channel);
        }
    }
    final Thread.UncaughtExceptionHandler defaultUnCaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
    Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
        try {
            new ExceptionNotification().create(e, getApplicationContext());
        } catch (Throwable fe) {
            fe.printStackTrace();
        } finally {
            defaultUnCaughtExceptionHandler.uncaughtException(t, e);
        }
    });
    SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    configuration = new AppConfiguration();
    configuration.isPatternTweetMuteEnabled = defaultSharedPreferences.getBoolean("patternTweetMuteEnabled", false);
    if (configuration.isPatternTweetMuteEnabled) {
        try {
            configuration.tweetMutePattern = Pattern.compile(defaultSharedPreferences.getString("tweetMutePattern", ""));
        } catch (PatternSyntaxException e) {
            e.printStackTrace();
            configuration.isPatternTweetMuteEnabled = false;
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    configuration.isPatternTweetMuteShowOnlyImageEnabled = defaultSharedPreferences.getBoolean("patternTweetMuteShowOnlyImageEnabled", false);
    if (configuration.isPatternTweetMuteShowOnlyImageEnabled) {
        try {
            configuration.tweetMuteShowOnlyImagePattern = Pattern.compile(defaultSharedPreferences.getString("tweetMuteShowOnlyImagePattern", ""));
        } catch (PatternSyntaxException e) {
            e.printStackTrace();
            configuration.isPatternTweetMuteShowOnlyImageEnabled = false;
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    configuration.isPatternUserScreenNameMuteEnabled = defaultSharedPreferences.getBoolean("patternUserScreenNameMuteEnabled", false);
    if (configuration.isPatternUserScreenNameMuteEnabled) {
        try {
            configuration.userScreenNameMutePattern = Pattern.compile(defaultSharedPreferences.getString("userScreenNameMutePattern", ""));
        } catch (PatternSyntaxException e) {
            e.printStackTrace();
            configuration.isPatternUserScreenNameMuteEnabled = false;
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    configuration.isPatternUserNameMuteEnabled = defaultSharedPreferences.getBoolean("patternUserNameMuteEnabled", false);
    if (configuration.isPatternUserNameMuteEnabled) {
        try {
            configuration.userNameMutePattern = Pattern.compile(defaultSharedPreferences.getString("userNameMutePattern", ""));
        } catch (PatternSyntaxException e) {
            e.printStackTrace();
            configuration.isPatternUserNameMuteEnabled = false;
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    configuration.isPatternTweetSourceMuteEnabled = defaultSharedPreferences.getBoolean("patternTweetSourceMuteEnabled", false);
    if (configuration.isPatternTweetSourceMuteEnabled) {
        try {
            configuration.tweetSourceMutePattern = Pattern.compile(defaultSharedPreferences.getString("tweetSourceMutePattern", ""));
        } catch (PatternSyntaxException e) {
            e.printStackTrace();
            configuration.isPatternTweetSourceMuteEnabled = false;
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    configuration.isTimelineImageLoad = Boolean.valueOf(defaultSharedPreferences.getString("isTimelineImageLoad", "true"));
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    @AppCompatDelegate.NightMode int mode = AppCompatDelegate.MODE_NIGHT_NO;
    switch(defaultSharedPreferences.getString("nightModeType", "mode_night_no_value")) {
        case "mode_night_no":
            mode = AppCompatDelegate.MODE_NIGHT_NO;
            break;
        case "mode_night_auto":
            mode = AppCompatDelegate.MODE_NIGHT_AUTO;
            break;
        case "mode_night_follow_system":
            mode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
            break;
        case "mode_night_yes":
            mode = AppCompatDelegate.MODE_NIGHT_YES;
            break;
    }
    AppCompatDelegate.setDefaultNightMode(mode);
    String accountKey = defaultSharedPreferences.getString("AccountKey", "-1");
    if (accountKey.equals("-1"))
        return;
    TokenSQLiteOpenHelper tokenOpenHelper = new TokenSQLiteOpenHelper(this);
    AccessToken accessToken = tokenOpenHelper.getAccessToken(accountKey);
    tokenOpenHelper.close();
    if (accessToken == null)
        return;
    initTwitter(accessToken);
    super.onCreate();
}
Also used : NotificationManager(android.app.NotificationManager) SharedPreferences(android.content.SharedPreferences) NotificationChannel(android.app.NotificationChannel) AccessToken(com.github.moko256.twicalico.entity.AccessToken) ExceptionNotification(com.github.moko256.twicalico.notification.ExceptionNotification) AppConfiguration(com.github.moko256.twicalico.config.AppConfiguration) TokenSQLiteOpenHelper(com.github.moko256.twicalico.database.TokenSQLiteOpenHelper) PatternSyntaxException(java.util.regex.PatternSyntaxException)

Aggregations

AccessToken (com.github.moko256.twicalico.entity.AccessToken)8 SharedPreferences (android.content.SharedPreferences)4 TokenSQLiteOpenHelper (com.github.moko256.twicalico.database.TokenSQLiteOpenHelper)4 Intent (android.content.Intent)3 Cursor (android.database.Cursor)3 SQLiteDatabase (android.database.sqlite.SQLiteDatabase)2 Bundle (android.os.Bundle)2 NonNull (android.support.annotation.NonNull)2 AlertDialog (android.support.v7.app.AlertDialog)2 AppConfiguration (com.github.moko256.twicalico.config.AppConfiguration)2 TwitterStringUtils (com.github.moko256.twicalico.text.TwitterStringUtils)2 NotificationChannel (android.app.NotificationChannel)1 NotificationManager (android.app.NotificationManager)1 ContentValues (android.content.ContentValues)1 PreferenceManager (android.preference.PreferenceManager)1 CustomTabsIntent (android.support.customtabs.CustomTabsIntent)1 NavigationView (android.support.design.widget.NavigationView)1 TabLayout (android.support.design.widget.TabLayout)1 ActivityOptionsCompat (android.support.v4.app.ActivityOptionsCompat)1 Fragment (android.support.v4.app.Fragment)1