Add scene result, update gallery comments for post comment, add isViewCreated in BaseScene

This commit is contained in:
seven332 committed 2016-02-06 16:08:08 +08:00
1 parent 875509be68
commit 67e3c8dc60
10 files changed
+161 -20

No files matched your search

@@ -24,7 +24,8 @@ public final class Announcer {
Bundle args;
TransitionHelper tranHelper;
int flag;
int requestId;
SceneFragment requestFrom;
int requestCode;
public Announcer(Class<?> clazz) {
this.clazz = clazz;
@@ -45,8 +46,9 @@ public final class Announcer {
return this;
}
public Announcer setRequestId(int requestId) {
this.requestId = requestId;
public Announcer setRequestCode(SceneFragment requestFrom, int requestCode) {
this.requestFrom = requestFrom;
this.requestCode = requestCode;
return this;
}
}
@@ -25,9 +25,12 @@ import android.support.v4.app.FragmentActivity;
import android.view.View;
import com.hippo.ehviewer.R;
import com.hippo.yorozuya.IntList;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
public class SceneFragment extends Fragment {
@@ -40,6 +43,17 @@ public class SceneFragment extends Fragment {
public static final int FLAG_REMOVE_ALL_THE_OTHER_SCENES = 0x1;
/** Standard scene result: operation canceled. */
public static final int RESULT_CANCELED = 0;
/** Standard scene result: operation succeeded. */
public static final int RESULT_OK = -1;
int resultCode = RESULT_CANCELED;
Bundle result = null;
List<String> mRequestSceneTagList = new ArrayList<>(0);
IntList mRequestCodeList = new IntList(0);
@LaunchMode
public int getLaunchMode() {
return LAUNCH_MODE_STANDARD;
@@ -100,4 +114,30 @@ public class SceneFragment extends Fragment {
view.setTag(R.id.fragment_tag, getTag());
view.setBackgroundColor(getContext().getResources().getColor(R.color.background_light));
}
void addRequest(String requestSceneTag, int requestCode) {
mRequestSceneTagList.add(requestSceneTag);
mRequestCodeList.add(requestCode);
}
void returnResult(StageActivity stage) {
for (int i = 0, size = Math.min(mRequestSceneTagList.size(), mRequestCodeList.size()); i < size; i++) {
String tag = mRequestSceneTagList.get(i);
int code = mRequestCodeList.get(i);
SceneFragment scene = stage.findSceneByTag(tag);
if (scene != null) {
scene.onSceneResult(code, resultCode, result);
}
}
mRequestSceneTagList.clear();
mRequestCodeList.clear();
}
protected void onSceneResult(int requestCode, int resultCode, Bundle data) {
}
public void setResult(int resultCode, Bundle result) {
this.resultCode = resultCode;
this.result = result;
}
}
@@ -147,6 +147,10 @@ public abstract class StageActivity extends AppCompatActivity {
currentScene.onNewArguments(args);
}
if (!removeAllTheOthers) {
// Check request
if (announcer.requestFrom != null) {
currentScene.addRequest(announcer.requestFrom.getTag(), announcer.requestCode);
}
// Done!
return;
}
@@ -221,6 +225,11 @@ public abstract class StageActivity extends AppCompatActivity {
}
transaction.commit();
// Check request
if (newScene != null && announcer.requestFrom != null) {
newScene.addRequest(announcer.requestFrom.getTag(), announcer.requestCode);
}
// Update SoftInputMode
if (newScene != null) {
getWindow().setSoftInputMode(newScene.getSoftInputMode());
@@ -305,9 +314,14 @@ public abstract class StageActivity extends AppCompatActivity {
// Remove tag
mSceneTagList.remove(index);
// Return result
if (scene instanceof SceneFragment) {
((SceneFragment) scene).returnResult(this);
}
// Update SoftInputMode
if (next instanceof SceneFragment) {
getWindow().setSoftInputMode(((SceneFragment) scene).getSoftInputMode());
getWindow().setSoftInputMode(((SceneFragment) next).getSoftInputMode());
}
}