投稿画面でホームボタンを押した際にも下書きを保存する
This commit is contained in:
parent
7b48ebd747
commit
9f2e4b0cfb
|
@ -3445,6 +3445,7 @@ public class ActMain extends AppCompatActivity
|
|||
|
||||
float density = dm.density;
|
||||
int column_w_min = (int) ( 0.5f + column_w_min_dp * density );
|
||||
if( column_w_min < 1) column_w_min =1;
|
||||
|
||||
if( sw < column_w_min * 2 ){
|
||||
// 最小幅で2つ表示できないのなら1カラム表示
|
||||
|
@ -3453,9 +3454,7 @@ public class ActMain extends AppCompatActivity
|
|||
|
||||
// カラム最小幅から計算した表示カラム数
|
||||
nScreenColumn = sw / column_w_min;
|
||||
if( nScreenColumn <= 0 ){
|
||||
nScreenColumn = 1;
|
||||
}
|
||||
if( nScreenColumn < 1 ) nScreenColumn = 1;
|
||||
|
||||
// データのカラム数より大きくならないようにする
|
||||
// (でも最小は1)
|
||||
|
|
|
@ -246,11 +246,20 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
@Override protected void onPause(){
|
||||
super.onPause();
|
||||
MyClickableSpan.link_callback = null;
|
||||
|
||||
// 編集中にホーム画面を押したり他アプリに移動する場合は下書きを保存する
|
||||
// やや過剰な気がするが、自アプリに戻ってくるときにランチャーからアイコンタップされると
|
||||
// メイン画面より上にあるアクティビティはすべて消されてしまうので
|
||||
// このタイミングで保存するしかない
|
||||
if( ! isPostComplete ){
|
||||
saveDraft();
|
||||
}
|
||||
}
|
||||
|
||||
SharedPreferences pref;
|
||||
ArrayList< PostAttachment > attachment_list;
|
||||
AppState app_state;
|
||||
boolean isPostComplete;
|
||||
|
||||
@Override
|
||||
protected void onCreate( @Nullable Bundle savedInstanceState ){
|
||||
|
@ -486,6 +495,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
handler.removeCallbacks( proc_text_changed );
|
||||
closeAcctPopup();
|
||||
super.onDestroy();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -559,11 +569,11 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
|
||||
setContentView( R.layout.act_post );
|
||||
|
||||
if( Pref.pref(this).getBoolean( Pref.KEY_POST_BUTTON_BAR_AT_TOP ,false)){
|
||||
if( Pref.pref( this ).getBoolean( Pref.KEY_POST_BUTTON_BAR_AT_TOP, false ) ){
|
||||
View bar = findViewById( R.id.llFooterBar );
|
||||
ViewGroup parent = (ViewGroup) bar.getParent();
|
||||
parent.removeView( bar );
|
||||
parent.addView( bar,0 );
|
||||
parent.addView( bar, 0 );
|
||||
}
|
||||
|
||||
Styler.fixHorizontalMargin( findViewById( R.id.scrollView ) );
|
||||
|
@ -731,7 +741,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
int end = etContent.getSelectionEnd();
|
||||
|
||||
String src = etContent.getText().toString();
|
||||
int last_sharp = src.lastIndexOf( '#',end-1 );
|
||||
int last_sharp = src.lastIndexOf( '#', end - 1 );
|
||||
|
||||
if( last_sharp == - 1 || end - last_sharp < 3 ){
|
||||
closeAcctPopup();
|
||||
|
@ -817,32 +827,32 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
.setItems( caption_list, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick( DialogInterface dialog, int which ){
|
||||
|
||||
if( which <0 || which >= tmp_account_list.size() ){
|
||||
|
||||
if( which < 0 || which >= tmp_account_list.size() ){
|
||||
// 範囲外
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
SavedAccount a = tmp_account_list.get( which );
|
||||
|
||||
if( ! a.host.equals( account.host ) ){
|
||||
// 別タンスへの移動
|
||||
if( in_reply_to_id != -1L ){
|
||||
if( in_reply_to_id != - 1L ){
|
||||
// 別タンスのアカウントならin_reply_toの変換が必要
|
||||
startReplyConversion(a);
|
||||
startReplyConversion( a );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// リプライがないか、同タンスへの移動
|
||||
setAccountWithVisibilityConversion(a);
|
||||
setAccountWithVisibilityConversion( a );
|
||||
}
|
||||
} )
|
||||
.setNegativeButton( R.string.cancel, null )
|
||||
.show();
|
||||
}
|
||||
|
||||
void setAccountWithVisibilityConversion(@NonNull SavedAccount a){
|
||||
void setAccountWithVisibilityConversion( @NonNull SavedAccount a ){
|
||||
setAccount( a );
|
||||
try{
|
||||
if( account.visibility != null && TootStatus.compareVisibility( visibility, a.visibility ) > 0 ){
|
||||
|
@ -855,7 +865,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
}
|
||||
}
|
||||
|
||||
private void startReplyConversion( @NonNull final SavedAccount access_info ){
|
||||
private void startReplyConversion( @NonNull final SavedAccount access_info ){
|
||||
if( in_reply_to_url == null ){
|
||||
// 下書きが古い形式の場合、URLがないので別タンスへの移動ができない
|
||||
new AlertDialog.Builder( ActPost.this )
|
||||
|
@ -904,7 +914,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
@Override protected void onPostExecute( TootApiResult result ){
|
||||
try{
|
||||
progress.dismiss();
|
||||
}catch(Throwable ex){
|
||||
}catch( Throwable ex ){
|
||||
ex.printStackTrace();
|
||||
}
|
||||
if( isCancelled() ) return;
|
||||
|
@ -915,7 +925,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
in_reply_to_id = target_status.id;
|
||||
setAccountWithVisibilityConversion( access_info );
|
||||
}else{
|
||||
Utils.showToast( ActPost.this, true, getString(R.string.in_reply_to_id_conversion_failed ) +"\n"+result.error );
|
||||
Utils.showToast( ActPost.this, true, getString( R.string.in_reply_to_id_conversion_failed ) + "\n" + result.error );
|
||||
}
|
||||
}
|
||||
}.executeOnExecutor( App1.task_executor );
|
||||
|
@ -1454,7 +1464,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
getString( R.string.recommended_plugin )
|
||||
, new Runnable() {
|
||||
@Override public void run(){
|
||||
showRecommendedPlugin(null);
|
||||
showRecommendedPlugin( null );
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -1656,6 +1666,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
data.putExtra( EXTRA_POSTED_STATUS_ID, status.id );
|
||||
|
||||
setResult( RESULT_OK, data );
|
||||
isPostComplete = true;
|
||||
ActPost.this.finish();
|
||||
}else{
|
||||
Utils.showToast( ActPost.this, true, result.error );
|
||||
|
@ -1715,7 +1726,6 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
static final String DRAFT_REPLY_IMAGE = "reply_image";
|
||||
static final String DRAFT_REPLY_URL = "reply_url";
|
||||
|
||||
|
||||
private void saveDraft(){
|
||||
String content = etContent.getText().toString();
|
||||
String content_warning = etContentWarning.getText().toString();
|
||||
|
@ -1877,7 +1887,7 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
boolean content_warning_checked = draft.optBoolean( DRAFT_CONTENT_WARNING_CHECK );
|
||||
boolean nsfw_checked = draft.optBoolean( DRAFT_NSFW_CHECK );
|
||||
JSONArray tmp_attachment_list = draft.optJSONArray( DRAFT_ATTACHMENT_LIST );
|
||||
long reply_id = draft.optLong( DRAFT_REPLY_ID, -1L );
|
||||
long reply_id = draft.optLong( DRAFT_REPLY_ID, - 1L );
|
||||
String reply_text = draft.optString( DRAFT_REPLY_TEXT, null );
|
||||
String reply_image = draft.optString( DRAFT_REPLY_IMAGE, null );
|
||||
String reply_url = draft.optString( DRAFT_REPLY_URL, null );
|
||||
|
@ -1997,18 +2007,17 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
|
||||
// Verify the intent will resolve to at least one activity
|
||||
if( intent.resolveActivity( getPackageManager() ) == null ){
|
||||
showRecommendedPlugin(getString( R.string.plugin_not_installed ));
|
||||
showRecommendedPlugin( getString( R.string.plugin_not_installed ) );
|
||||
return;
|
||||
}
|
||||
startActivityForResult( chooser, REQUEST_CODE_MUSHROOM );
|
||||
|
||||
}catch( Throwable ex ){
|
||||
ex.printStackTrace();
|
||||
showRecommendedPlugin(getString( R.string.plugin_not_installed ));
|
||||
showRecommendedPlugin( getString( R.string.plugin_not_installed ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void applyMushroomResult( String text ){
|
||||
if( mushroom_input == 1 ){
|
||||
applyMushroomText( etContentWarning, text );
|
||||
|
@ -2017,55 +2026,55 @@ public class ActPost extends AppCompatActivity implements View.OnClickListener,
|
|||
}
|
||||
}
|
||||
|
||||
private void showRecommendedPlugin(String title){
|
||||
String language_code = getString(R.string.language_code);
|
||||
private void showRecommendedPlugin( String title ){
|
||||
String language_code = getString( R.string.language_code );
|
||||
int res_id;
|
||||
if( "ja".equals( language_code )){
|
||||
if( "ja".equals( language_code ) ){
|
||||
res_id = R.raw.recommended_plugin_ja;
|
||||
}else if ( "fr".equals( language_code )){
|
||||
}else if( "fr".equals( language_code ) ){
|
||||
res_id = R.raw.recommended_plugin_fr;
|
||||
}else{
|
||||
res_id = R.raw.recommended_plugin_en;
|
||||
}
|
||||
try{
|
||||
InputStream is = getResources().openRawResource(res_id );
|
||||
InputStream is = getResources().openRawResource( res_id );
|
||||
try{
|
||||
ByteArrayOutputStream bao = new ByteArrayOutputStream( );
|
||||
IOUtils.copy( is,bao );
|
||||
String text = Utils.decodeUTF8(bao.toByteArray());
|
||||
|
||||
View viewRoot = getLayoutInflater().inflate( R.layout.dlg_plugin_missing,null,false );
|
||||
|
||||
TextView tvText = (TextView)viewRoot. findViewById(R.id.tvText);
|
||||
ByteArrayOutputStream bao = new ByteArrayOutputStream();
|
||||
IOUtils.copy( is, bao );
|
||||
String text = Utils.decodeUTF8( bao.toByteArray() );
|
||||
|
||||
View viewRoot = getLayoutInflater().inflate( R.layout.dlg_plugin_missing, null, false );
|
||||
|
||||
TextView tvText = (TextView) viewRoot.findViewById( R.id.tvText );
|
||||
LinkClickContext lcc = new LinkClickContext() {
|
||||
@Override public AcctColor findAcctColor( String url ){
|
||||
return null;
|
||||
}
|
||||
};
|
||||
CharSequence sv = HTMLDecoder.decodeHTML( lcc,text,false,null );
|
||||
tvText.setText(sv );
|
||||
tvText.setMovementMethod( LinkMovementMethod.getInstance() );
|
||||
|
||||
TextView tvTitle = (TextView)viewRoot. findViewById(R.id.tvTitle);
|
||||
if( TextUtils.isEmpty( title )){
|
||||
CharSequence sv = HTMLDecoder.decodeHTML( lcc, text, false, null );
|
||||
tvText.setText( sv );
|
||||
tvText.setMovementMethod( LinkMovementMethod.getInstance() );
|
||||
|
||||
TextView tvTitle = (TextView) viewRoot.findViewById( R.id.tvTitle );
|
||||
if( TextUtils.isEmpty( title ) ){
|
||||
tvTitle.setVisibility( View.GONE );
|
||||
}else{
|
||||
tvTitle.setText( title );
|
||||
|
||||
}
|
||||
|
||||
new AlertDialog.Builder(this)
|
||||
.setView(viewRoot )
|
||||
|
||||
new AlertDialog.Builder( this )
|
||||
.setView( viewRoot )
|
||||
.setCancelable( true )
|
||||
.setNeutralButton( R.string.close, null )
|
||||
.show();
|
||||
|
||||
|
||||
}finally{
|
||||
IOUtils.closeQuietly( is );
|
||||
}
|
||||
|
||||
}catch(Throwable ex){
|
||||
ex.printStackTrace( );
|
||||
}catch( Throwable ex ){
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue