「別アカウントでお気に入り/ブースト/返信/フォロー/プロフ/メッセージ」のアカウント選択ダイアログで同タンスのアカウントを先頭に表示する
This commit is contained in:
parent
6831d31664
commit
57e17a41cf
@ -9,8 +9,8 @@ android {
|
||||
applicationId "jp.juggler.subwaytooter"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 26
|
||||
versionCode 150
|
||||
versionName "1.5.0"
|
||||
versionCode 151
|
||||
versionName "1.5.1"
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
|
@ -238,7 +238,6 @@ public class ActMain extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 各カラムのアカウント設定を読み直す
|
||||
reloadAccountSetting();
|
||||
|
||||
@ -250,8 +249,6 @@ public class ActMain extends AppCompatActivity
|
||||
column.onStart( this );
|
||||
}
|
||||
|
||||
|
||||
|
||||
// カラムの表示範囲インジケータを更新
|
||||
updateColumnStripSelection( - 1, - 1f );
|
||||
|
||||
@ -316,7 +313,6 @@ public class ActMain extends AppCompatActivity
|
||||
}
|
||||
pref.edit().putInt( Pref.KEY_LAST_COLUMN_POS, column_pos ).apply();
|
||||
|
||||
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@ -371,8 +367,6 @@ public class ActMain extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override public void onClick( View v ){
|
||||
switch( v.getId() ){
|
||||
case R.id.btnMenu:
|
||||
@ -410,7 +404,6 @@ public class ActMain extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
post_helper.content = etQuickToot.getText().toString().trim();
|
||||
post_helper.spoiler_text = null;
|
||||
post_helper.visibility = account.visibility;
|
||||
@ -1252,7 +1245,7 @@ public class ActMain extends AppCompatActivity
|
||||
String username = "?";
|
||||
String full_acct = username + "@" + host;
|
||||
|
||||
SavedAccount account = SavedAccount.loadPseudoAccount( this,log, full_acct );
|
||||
SavedAccount account = SavedAccount.loadAccountByAcct( this, log, full_acct );
|
||||
if( account != null ){
|
||||
return account;
|
||||
}
|
||||
@ -1809,7 +1802,6 @@ public class ActMain extends AppCompatActivity
|
||||
Utils.showToast( ActMain.this, false, R.string.app_was_muted );
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
interface FindAccountCallback {
|
||||
@ -2043,7 +2035,6 @@ public class ActMain extends AppCompatActivity
|
||||
// ソートする
|
||||
SavedAccount.sort( account_list );
|
||||
|
||||
|
||||
ArrayList< SavedAccount > list_original = new ArrayList<>();
|
||||
ArrayList< SavedAccount > list_original_pseudo = new ArrayList<>();
|
||||
ArrayList< SavedAccount > list_other = new ArrayList<>();
|
||||
@ -2191,8 +2182,6 @@ public class ActMain extends AppCompatActivity
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
openChromeTab( pos, (SavedAccount) span.lcc, span.url, false );
|
||||
}
|
||||
};
|
||||
@ -2230,11 +2219,15 @@ public class ActMain extends AppCompatActivity
|
||||
ActPost.open( this, REQUEST_CODE_POST, account.db_id, "@" + account.getFullAcct( who ) + " " );
|
||||
}
|
||||
|
||||
public void performMentionFromAnotherAccount( SavedAccount access_info, final TootAccount who, ArrayList< SavedAccount > account_list_non_pseudo ){
|
||||
public void performMentionFromAnotherAccount( SavedAccount access_info, @Nullable final TootAccount who ){
|
||||
if( who == null ) return;
|
||||
String who_host = access_info.getAccountHost( who );
|
||||
|
||||
final String initial_text = "@" + access_info.getFullAcct( who ) + " ";
|
||||
AccountPicker.pick( this, false, false
|
||||
, getString( R.string.account_picker_toot )
|
||||
, account_list_non_pseudo, new AccountPicker.AccountPickerCallback() {
|
||||
, makeAccountList( log, false, who_host )
|
||||
, new AccountPicker.AccountPickerCallback() {
|
||||
@Override public void onAccountPicked( @NonNull SavedAccount ai ){
|
||||
ActPost.open( ActMain.this, REQUEST_CODE_POST, ai.db_id, initial_text );
|
||||
}
|
||||
@ -2314,9 +2307,13 @@ public class ActMain extends AppCompatActivity
|
||||
}.executeOnExecutor( App1.task_executor );
|
||||
}
|
||||
|
||||
void openProfileFromAnotherAccount( final int pos, @NonNull final SavedAccount access_info, final TootAccount who ){
|
||||
void openProfileFromAnotherAccount( final int pos, @NonNull final SavedAccount access_info, @Nullable final TootAccount who ){
|
||||
if( who == null ) return;
|
||||
String who_host = access_info.getAccountHost( who );
|
||||
|
||||
AccountPicker.pick( this, false, false
|
||||
, getString( R.string.account_picker_open_user_who, AcctColor.getNickname( who.acct ) )
|
||||
, makeAccountList( log, false, who_host )
|
||||
, new AccountPicker.AccountPickerCallback() {
|
||||
@Override public void onAccountPicked( @NonNull SavedAccount ai ){
|
||||
if( ai.host.equalsIgnoreCase( access_info.host ) ){
|
||||
@ -2370,23 +2367,18 @@ public class ActMain extends AppCompatActivity
|
||||
|
||||
// 文脈がない、もしくは疑似アカウントだった
|
||||
|
||||
// 疑似アカウントではユーザ情報APIを呼べないし検索APIも使えない
|
||||
|
||||
// 疑似ではないアカウントの一覧
|
||||
ArrayList< SavedAccount > account_list_filtered = new ArrayList<>();
|
||||
for( SavedAccount a : SavedAccount.loadAccountList( ActMain.this, log ) ){
|
||||
if( a.isPseudo() ) continue;
|
||||
account_list_filtered.add( a );
|
||||
}
|
||||
|
||||
if( account_list_filtered.isEmpty() ){
|
||||
// アカウントがないのでchrome tab で開くしかない
|
||||
if( ! SavedAccount.hasRealAccount(log) ){
|
||||
// 疑似アカウントではユーザ情報APIを呼べないし検索APIも使えない
|
||||
// chrome tab で開くしかない
|
||||
openChromeTab( pos, access_info, url, true );
|
||||
}else{
|
||||
// アカウントを選択して開く
|
||||
AccountPicker.pick( this, false, false
|
||||
, getString( R.string.account_picker_open_user_who, AcctColor.getNickname( user + "@" + host ) )
|
||||
, account_list_filtered
|
||||
, makeAccountList( log,false,host )
|
||||
, new AccountPicker.AccountPickerCallback() {
|
||||
@Override public void onAccountPicked( @NonNull SavedAccount ai ){
|
||||
openProfileRemote( pos, ai, url );
|
||||
@ -2813,10 +2805,11 @@ public class ActMain extends AppCompatActivity
|
||||
|
||||
// static final Pattern reUriActivityPubToot = Pattern.compile( "tag:([^,]*),[^:]*:objectId=(\\d+):objectType=Status", Pattern.CASE_INSENSITIVE );
|
||||
|
||||
public void openStatusOtherInstance( int pos, @NonNull SavedAccount access_info, @NonNull TootStatusLike status ){
|
||||
if( status.account == null ){
|
||||
public void openStatusOtherInstance( int pos, @NonNull SavedAccount access_info, @Nullable TootStatusLike status ){
|
||||
// アカウント情報がないと出来ないことがある
|
||||
}else if( status instanceof MSPToot ){
|
||||
if( status == null || status.account == null ) return;
|
||||
|
||||
if( status instanceof MSPToot ){
|
||||
// トゥート検索の場合
|
||||
openStatusOtherInstance( pos, access_info, status.url
|
||||
, status.id
|
||||
@ -3119,7 +3112,8 @@ public class ActMain extends AppCompatActivity
|
||||
|
||||
for( Column column : app_state.column_list ){
|
||||
column.findStatus( access_info.host, new_status.id, new Column.StatusEntryCallback() {
|
||||
@Override public boolean onIterate( SavedAccount account, TootStatus status ){
|
||||
@Override
|
||||
public boolean onIterate( SavedAccount account, TootStatus status ){
|
||||
status.pinned = bSet;
|
||||
return true;
|
||||
}
|
||||
@ -4055,6 +4049,7 @@ public class ActMain extends AppCompatActivity
|
||||
Utils.showToast( ActMain.this, false, R.string.unboost_succeeded );
|
||||
}
|
||||
};
|
||||
|
||||
private void openOSSLicense(){
|
||||
startActivity( new Intent( this, ActOSSLicense.class ) );
|
||||
}
|
||||
@ -4194,6 +4189,20 @@ public class ActMain extends AppCompatActivity
|
||||
return dst;
|
||||
}
|
||||
|
||||
private ArrayList< SavedAccount > makeAccountList( @NonNull LogCategory log, boolean bAllowPseudo, @Nullable String pickup_host ){
|
||||
|
||||
ArrayList< SavedAccount > list_same_host = new ArrayList<>();
|
||||
ArrayList< SavedAccount > list_other_host = new ArrayList<>();
|
||||
for( SavedAccount a : SavedAccount.loadAccountList( ActMain.this, log ) ){
|
||||
if( a.isPseudo() && ( a.isNA() || ! bAllowPseudo ) ) continue;
|
||||
( pickup_host == null || pickup_host.equalsIgnoreCase( a.host ) ? list_same_host : list_other_host ).add( a );
|
||||
}
|
||||
SavedAccount.sort( list_same_host );
|
||||
SavedAccount.sort( list_other_host );
|
||||
list_same_host.addAll( list_other_host );
|
||||
return list_same_host;
|
||||
}
|
||||
|
||||
// 別アカ操作と別タンスの関係
|
||||
static final int NOT_CROSS_ACCOUNT = 1;
|
||||
static final int CROSS_ACCOUNT_SAME_INSTANCE = 2;
|
||||
@ -4211,9 +4220,11 @@ public class ActMain extends AppCompatActivity
|
||||
|
||||
void openBoostFromAnotherAccount( @NonNull final SavedAccount timeline_account, @Nullable final TootStatusLike status ){
|
||||
if( status == null ) return;
|
||||
String who_host = status.account == null ? null : timeline_account.getAccountHost( status.account );
|
||||
|
||||
AccountPicker.pick( this, false, false
|
||||
, getString( R.string.account_picker_boost )
|
||||
, makeAccountListNonPseudo( log )
|
||||
, makeAccountList( log, false, who_host )
|
||||
, new AccountPicker.AccountPickerCallback() {
|
||||
@Override public void onAccountPicked( @NonNull SavedAccount action_account ){
|
||||
performBoost(
|
||||
@ -4228,11 +4239,13 @@ public class ActMain extends AppCompatActivity
|
||||
} );
|
||||
}
|
||||
|
||||
void openFavouriteFromAnotherAccount( @NonNull final SavedAccount timeline_account, final TootStatusLike status ){
|
||||
void openFavouriteFromAnotherAccount( @NonNull final SavedAccount timeline_account, @Nullable final TootStatusLike status ){
|
||||
if( status == null ) return;
|
||||
String who_host = status.account == null ? null : timeline_account.getAccountHost( status.account );
|
||||
|
||||
AccountPicker.pick( this, false, false
|
||||
, getString( R.string.account_picker_favourite )
|
||||
, makeAccountListNonPseudo( log )
|
||||
, makeAccountList( log, false, who_host )
|
||||
, new AccountPicker.AccountPickerCallback() {
|
||||
@Override public void onAccountPicked( @NonNull SavedAccount action_account ){
|
||||
performFavourite(
|
||||
@ -4246,10 +4259,13 @@ public class ActMain extends AppCompatActivity
|
||||
} );
|
||||
}
|
||||
|
||||
void openReplyFromAnotherAccount( final TootStatusLike status ){
|
||||
void openReplyFromAnotherAccount( @NonNull final SavedAccount timeline_account, @Nullable final TootStatusLike status ){
|
||||
if( status == null ) return;
|
||||
String who_host = status.account == null ? null : timeline_account.getAccountHost( status.account );
|
||||
AccountPicker.pick( this, false, false
|
||||
, getString( R.string.account_picker_reply )
|
||||
, makeAccountListNonPseudo( log ), new AccountPicker.AccountPickerCallback() {
|
||||
, makeAccountList( log, false, who_host )
|
||||
, new AccountPicker.AccountPickerCallback() {
|
||||
@Override public void onAccountPicked( @NonNull SavedAccount ai ){
|
||||
if( status instanceof MSPToot ){
|
||||
// MSPの場合、status.url は https://instance/@user/:status_id の形式になる
|
||||
@ -4283,12 +4299,15 @@ public class ActMain extends AppCompatActivity
|
||||
// openFollowFromAnotherAccount( access_info, status.account );
|
||||
// }
|
||||
|
||||
void openFollowFromAnotherAccount( @NonNull SavedAccount access_info, final TootAccount account ){
|
||||
void openFollowFromAnotherAccount( @NonNull SavedAccount access_info, @Nullable final TootAccount account ){
|
||||
if( account == null ) return;
|
||||
String who_host = access_info.getAccountHost( account );
|
||||
|
||||
final String who_acct = access_info.getFullAcct( account );
|
||||
AccountPicker.pick( this, false, false
|
||||
, getString( R.string.account_picker_follow )
|
||||
, makeAccountListNonPseudo( log ), new AccountPicker.AccountPickerCallback() {
|
||||
, makeAccountList( log, false, who_host )
|
||||
, new AccountPicker.AccountPickerCallback() {
|
||||
@Override public void onAccountPicked( @NonNull SavedAccount ai ){
|
||||
callRemoteFollow( ai, who_acct, account.locked, false, follow_complete_callback );
|
||||
}
|
||||
@ -4464,8 +4483,6 @@ public class ActMain extends AppCompatActivity
|
||||
tablet_pager_adapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void scrollToColumn( int index, boolean bAlign ){
|
||||
scrollColumnStrip( index );
|
||||
|
||||
@ -4628,16 +4645,16 @@ public class ActMain extends AppCompatActivity
|
||||
if( host.equalsIgnoreCase( a.host ) ) account_list.add( a );
|
||||
}
|
||||
if( account_list.isEmpty() ){
|
||||
|
||||
SavedAccount ai = addPseudoAccount( host );
|
||||
if( ai != null ){
|
||||
addColumn( getDefaultInsertPosition(), ai, Column.TYPE_LOCAL );
|
||||
}
|
||||
|
||||
}else{
|
||||
SavedAccount.sort( account_list);
|
||||
AccountPicker.pick( this, true, false
|
||||
, getString( R.string.account_picker_add_timeline_of, host )
|
||||
, account_list, new AccountPicker.AccountPickerCallback() {
|
||||
, account_list
|
||||
, new AccountPicker.AccountPickerCallback() {
|
||||
@Override public void onAccountPicked( @NonNull SavedAccount ai ){
|
||||
addColumn( getDefaultInsertPosition(), ai, Column.TYPE_LOCAL );
|
||||
}
|
||||
|
@ -325,7 +325,7 @@ class DlgContextMenu implements View.OnClickListener, View.OnLongClickListener {
|
||||
break;
|
||||
|
||||
case R.id.btnReplyAnotherAccount:
|
||||
activity.openReplyFromAnotherAccount( status );
|
||||
activity.openReplyFromAnotherAccount( access_info,status );
|
||||
break;
|
||||
|
||||
case R.id.btnConversationAnotherAccount:
|
||||
@ -462,21 +462,15 @@ class DlgContextMenu implements View.OnClickListener, View.OnLongClickListener {
|
||||
break;
|
||||
|
||||
case R.id.btnFollowFromAnotherAccount:
|
||||
if( who != null ){
|
||||
activity.openFollowFromAnotherAccount( access_info, who );
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.btnSendMessageFromAnotherAccount:
|
||||
if( who != null ){
|
||||
activity.performMentionFromAnotherAccount( access_info, who, account_list_non_pseudo );
|
||||
}
|
||||
activity.performMentionFromAnotherAccount( access_info, who );
|
||||
break;
|
||||
|
||||
case R.id.btnOpenProfileFromAnotherAccount:
|
||||
if( who != null ){
|
||||
activity.openProfileFromAnotherAccount( pos, access_info, who );
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.btnNickname:
|
||||
|
@ -148,7 +148,7 @@ class StatusButtons implements View.OnClickListener, View.OnLongClickListener {
|
||||
if( status instanceof TootStatus && ! access_info.isPseudo() ){
|
||||
activity.performReply( access_info, (TootStatus) status );
|
||||
}else{
|
||||
activity.openReplyFromAnotherAccount( status );
|
||||
activity.openReplyFromAnotherAccount( access_info, status );
|
||||
}
|
||||
break;
|
||||
|
||||
@ -218,13 +218,13 @@ class StatusButtons implements View.OnClickListener, View.OnLongClickListener {
|
||||
break;
|
||||
|
||||
case R.id.btnFollow2:
|
||||
if( status != null && status.account != null ){
|
||||
if( status != null ){
|
||||
activity.openFollowFromAnotherAccount( access_info, status.account );
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.btnReply:
|
||||
activity.openReplyFromAnotherAccount( status );
|
||||
activity.openReplyFromAnotherAccount( access_info, status );
|
||||
break;
|
||||
|
||||
}
|
||||
|
@ -41,7 +41,8 @@ public class AccountPicker {
|
||||
){
|
||||
|
||||
ArrayList< SavedAccount > account_list = SavedAccount.loadAccountList( activity,ActMain.log );
|
||||
pick( activity, bAllowPseudo, bAuto, message, account_list, callback ,null );
|
||||
SavedAccount.sort( account_list );
|
||||
pick( activity, bAllowPseudo, bAuto, message, account_list, true,callback ,null );
|
||||
}
|
||||
|
||||
public static void pick(
|
||||
@ -50,10 +51,10 @@ public class AccountPicker {
|
||||
, boolean bAuto
|
||||
, String message
|
||||
, @NonNull final AccountPickerCallback callback
|
||||
, @Nullable final DialogInterface.OnDismissListener dissmiss_callback
|
||||
, @Nullable final DialogInterface.OnDismissListener dismiss_callback
|
||||
){
|
||||
ArrayList< SavedAccount > account_list = SavedAccount.loadAccountList( activity,ActMain.log );
|
||||
pick( activity, bAllowPseudo, bAuto, message, account_list, callback ,dissmiss_callback );
|
||||
pick( activity, bAllowPseudo, bAuto, message, account_list, true, callback ,dismiss_callback );
|
||||
}
|
||||
|
||||
public static void pick(
|
||||
@ -64,15 +65,16 @@ public class AccountPicker {
|
||||
, @NonNull final ArrayList< SavedAccount > account_list
|
||||
, @NonNull final AccountPickerCallback callback
|
||||
){
|
||||
pick( activity, bAllowPseudo, bAuto, message, account_list, callback ,null );
|
||||
pick( activity, bAllowPseudo, bAuto, message, account_list, false, callback ,null );
|
||||
}
|
||||
|
||||
public static void pick(
|
||||
private static void pick(
|
||||
@NonNull AppCompatActivity activity
|
||||
, boolean bAllowPseudo
|
||||
, boolean bAuto
|
||||
, String message
|
||||
, @NonNull final ArrayList< SavedAccount > account_list
|
||||
,boolean bSort
|
||||
, @NonNull final AccountPickerCallback callback
|
||||
, @Nullable final DialogInterface.OnDismissListener dismiss_callback
|
||||
){
|
||||
@ -95,12 +97,16 @@ public class AccountPicker {
|
||||
}
|
||||
}
|
||||
|
||||
if(bSort){
|
||||
SavedAccount.sort( account_list );
|
||||
}
|
||||
|
||||
if( bAuto && account_list.size() == 1 ){
|
||||
callback.onAccountPicked( account_list.get( 0 ) );
|
||||
return;
|
||||
}
|
||||
|
||||
SavedAccount.sort( account_list );
|
||||
|
||||
|
||||
@SuppressLint("InflateParams") View viewRoot = activity.getLayoutInflater().inflate( R.layout.dlg_account_picker, null, false );
|
||||
|
||||
|
@ -98,7 +98,7 @@ public class SavedAccount extends TootAccount implements LinkClickContext {
|
||||
return instance;
|
||||
}
|
||||
public void setInstance(@NonNull TootInstance instance){
|
||||
if( instance != null ) refInstance.set(instance);
|
||||
refInstance.set(instance);
|
||||
}
|
||||
|
||||
|
||||
@ -462,7 +462,7 @@ public class SavedAccount extends TootAccount implements LinkClickContext {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static SavedAccount loadPseudoAccount( Context context, @NonNull LogCategory log, String full_acct ){
|
||||
public static SavedAccount loadAccountByAcct( Context context, @NonNull LogCategory log, String full_acct ){
|
||||
try{
|
||||
Cursor cursor = App1.getDB().query( table, null, COL_USER + "=?", new String[]{ full_acct }, null, null, null );
|
||||
try{
|
||||
@ -474,11 +474,28 @@ public class SavedAccount extends TootAccount implements LinkClickContext {
|
||||
}
|
||||
}catch( Throwable ex ){
|
||||
log.trace( ex );
|
||||
log.e( ex, "loadPseudoAccount failed." );
|
||||
log.e( ex, "loadAccountByAcct failed." );
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean hasRealAccount( @NonNull LogCategory log ){
|
||||
try{
|
||||
Cursor cursor = App1.getDB().query( table, null, COL_USER + " NOT LIKE '?@%'", null , null, null, null, "1");
|
||||
try{
|
||||
if( cursor.moveToNext() ){
|
||||
return true;
|
||||
}
|
||||
}finally{
|
||||
cursor.close();
|
||||
}
|
||||
}catch( Throwable ex ){
|
||||
log.trace( ex );
|
||||
log.e( ex, "hasNonPseudoAccount failed." );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
public @NonNull String getAccountHost( @Nullable String acct ){
|
||||
@ -665,4 +682,8 @@ public class SavedAccount extends TootAccount implements LinkClickContext {
|
||||
Collections.sort( account_list, account_comparator );
|
||||
}
|
||||
|
||||
public @NonNull String getAcctHost( @NonNull TootAccount who ){
|
||||
String host = who.getAcctHost();
|
||||
return host != null ? host : this.host;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user