Skip to content
This repository has been archived by the owner on Feb 9, 2018. It is now read-only.

Commit

Permalink
Fix #11: Allow saving drafts / published posts.
Browse files Browse the repository at this point in the history
  • Loading branch information
vickychijwani committed Feb 24, 2015
1 parent ddbce22 commit 960a32d
Show file tree
Hide file tree
Showing 13 changed files with 127 additions and 46 deletions.
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
<activity
android:name=".view.PostViewActivity"
android:parentActivityName=".view.PostListActivity"
android:windowSoftInputMode="adjustResize">
android:windowSoftInputMode="adjustNothing">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".view.PostListActivity"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package me.vickychijwani.spectre.model;

import java.util.Arrays;
import java.util.List;

// dummy wrapper class needed for Retrofit
public class PostList {

public List<Post> posts;

public static PostList from(Post... posts) {
PostList postList = new PostList();
postList.posts = Arrays.asList(posts);
return postList;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import retrofit.http.GET;
import retrofit.http.Header;
import retrofit.http.POST;
import retrofit.http.PUT;
import retrofit.http.Path;

public interface GhostApiService {

Expand All @@ -17,4 +19,8 @@ public interface GhostApiService {
@GET("/posts/?status=all&staticPages=all&page=1&include=tags")
void getPosts(@Header("Authorization") String authorization, Callback<PostList> cb);

@PUT("/posts/{id}/?include=tags")
void updatePost(@Header("Authorization") String authorization, @Path("id") int id,
@Body PostList posts, Callback<PostList> cb);

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public abstract class BaseActivity extends ActionBarActivity {
// TODO get rid of this shit
protected static AuthToken sAuthToken = null;

public static AuthToken getAuthToken() {
return sAuthToken;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ public void onClick(View view) {
@Override
public void success(AuthToken authToken, Response response) {
sAuthToken = authToken;
Log.e(TAG, "Got new access token = " + sAuthToken.access_token);
Log.d(TAG, "Got new access token = " + sAuthToken.access_token);

UserPrefs prefs = UserPrefs.getInstance(LoginActivity.this);
prefs.setString(UserPrefs.Key.BLOG_URL, blogUrl);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public class PostViewActivity extends BaseActivity implements
PostViewFragment.OnEditClickListener,
PostEditFragment.OnPreviewClickListener {

private static final String TAG = "PostViewActivity";

@InjectView(R.id.toolbar)
Toolbar mToolbar;

Expand Down Expand Up @@ -45,9 +47,6 @@ protected void onCreate(Bundle savedInstanceState) {
.add(R.id.fragment_container, mPostEditFragment)
.commit();

// begin in edit mode
onEditClicked();

mUpClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Expand All @@ -58,24 +57,14 @@ public void onClick(View v) {

@Override
public void onPreviewClicked() {
mPostViewFragment.onShow();
getSupportFragmentManager()
.beginTransaction()
.show(mPostViewFragment)
.hide(mPostEditFragment)
.commit();
mPostEditFragment.onHide();
mPostEditFragment.hide();
mPostViewFragment.show();
}

@Override
public void onEditClicked() {
mPostEditFragment.onShow();
getSupportFragmentManager()
.beginTransaction()
.show(mPostEditFragment)
.hide(mPostViewFragment)
.commit();
mPostViewFragment.onHide();
mPostViewFragment.hide();
mPostEditFragment.show();
}

public void setNavigationItem(int iconResId, View.OnClickListener clickListener) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,30 @@
package me.vickychijwani.spectre.view.fragments;

import android.support.v4.app.Fragment;
import android.view.View;

public class BaseFragment extends Fragment {

/**
* Hide the root {@link android.view.View} of this Fragment.
*/
public void hide() {
if (getView() != null) {
getView().setVisibility(View.GONE);
onHide();
}
}

/**
* Show the root {@link android.view.View} of this Fragment.
*/
public void show() {
if (getView() != null) {
onShow();
getView().setVisibility(View.VISIBLE);
}
}

/**
* Called by the hosting {@link me.vickychijwani.spectre.view.BaseActivity} when the fragment is
* being hidden from view.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
Expand All @@ -16,6 +17,7 @@
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.commonsware.cwac.anddown.AndDown;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
Expand All @@ -25,14 +27,22 @@

import butterknife.ButterKnife;
import butterknife.InjectView;
import me.vickychijwani.spectre.Globals;
import me.vickychijwani.spectre.R;
import me.vickychijwani.spectre.model.Post;
import me.vickychijwani.spectre.model.PostList;
import me.vickychijwani.spectre.util.AppUtils;
import me.vickychijwani.spectre.view.BaseActivity;
import me.vickychijwani.spectre.view.PostViewActivity;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;

public class PostEditFragment extends BaseFragment implements
ObservableScrollViewCallbacks {

private static final String TAG = "PostEditFragment";

@InjectView(R.id.post_header)
View mPostHeader;

Expand All @@ -48,7 +58,7 @@ public class PostEditFragment extends BaseFragment implements
@InjectView(R.id.post_markdown_scroll_view)
ObservableScrollView mScrollView;

private OnPreviewClickListener mCallback;
private OnPreviewClickListener mPreviewClickListener;
private Post mPost;
private AndDown mAndDown; // Markdown parser

Expand Down Expand Up @@ -99,7 +109,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
@Override
public void onClick(View v) {
mPostTitleEditView.setText(mPost.title);
onCloseActionMode(true);
stopActionMode(true);
}
};

Expand All @@ -110,9 +120,9 @@ public void onClick(View v) {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (mActionModeState == ActionModeState.STOPPED) {
onStartActionMode();
startActionMode();
} else if (mActionModeState == ActionModeState.STARTED) {
onCloseActionMode(true);
stopActionMode(true);
}
}
});
Expand All @@ -125,7 +135,7 @@ public void onFocusChange(View v, boolean hasFocus) {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mPost.title = mPostTitleEditView.getText().toString();
onCloseActionMode(false);
stopActionMode(false);
return true;
}
return false;
Expand All @@ -136,7 +146,7 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
mPreviewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCallback.onPreviewClicked();
mPreviewClickListener.onPreviewClicked();
}
});

Expand All @@ -149,16 +159,14 @@ public void onClick(View v) {
}

@Override
public void onResume() {
super.onResume();
mPostEditView.setText(mPost.markdown);
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
show();
}

@Override
public void onPause() {
super.onPause();
mPost.markdown = mPostEditView.getText().toString();
mPost.html = mAndDown.markdownToHtml(mPost.markdown);
public void onResume() {
super.onResume();
mPostEditView.setText(mPost.markdown);
}

@Override
Expand All @@ -168,12 +176,18 @@ public void onShow() {
}
}

@Override
public void onHide() {
mPost.markdown = mPostEditView.getText().toString();
mPost.html = mAndDown.markdownToHtml(mPost.markdown);
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

try {
mCallback = (OnPreviewClickListener) activity;
mPreviewClickListener = (OnPreviewClickListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ "must implement OnPreviewClickListener");
Expand All @@ -182,7 +196,7 @@ public void onAttach(Activity activity) {


// action mode
private void onStartActionMode() {
private void startActionMode() {
mActionModeState = ActionModeState.STARTING;
mPostTitleEditView.setBackgroundDrawable(mEditTextDefaultBackground);
mActivity.setTitle(getString(R.string.edit_title));
Expand All @@ -192,7 +206,7 @@ private void onStartActionMode() {
mActionModeState = ActionModeState.STARTED;
}

private void onCloseActionMode(boolean discardChanges) {
private void stopActionMode(boolean discardChanges) {
if (discardChanges) {
mPostTitleEditView.setText(mPost.title);
} else {
Expand All @@ -212,7 +226,7 @@ private void onCloseActionMode(boolean discardChanges) {
@Override
public boolean onBackPressed() {
if (mActionModeState == ActionModeState.STARTED) {
onCloseActionMode(true);
stopActionMode(true);
return true;
}
return super.onBackPressed();
Expand All @@ -225,22 +239,48 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.action_done).setVisible(
boolean actionModeActive =
mActionModeState == ActionModeState.STARTING ||
mActionModeState == ActionModeState.STARTED);
mActionModeState == ActionModeState.STARTED;
menu.findItem(R.id.action_done).setVisible(actionModeActive);
menu.findItem(R.id.action_save).setVisible(! actionModeActive);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_done:
onCloseActionMode(false);
stopActionMode(false);
return true;
case R.id.action_save:
onSaveClicked();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

private void onSaveClicked() {
mPost.markdown = mPostEditView.getText().toString();
mPost.html = null; // omit stale HTML from request body
Globals.getInstance().api.updatePost(
"Bearer " + BaseActivity.getAuthToken().access_token,
mPost.id,
PostList.from(mPost),
new Callback<PostList>() {
@Override
public void success(PostList postList, Response response) {
Toast.makeText(mActivity, "Post saved!", Toast.LENGTH_SHORT).show();
}

@Override
public void failure(RetrofitError error) {
Log.e(TAG, Log.getStackTraceString(error));
}
}
);
}


// scroll behaviour
@Override
Expand Down

0 comments on commit 960a32d

Please sign in to comment.