Added German language support and bug fixes

This commit is contained in:
Caesar2011
2017-04-06 13:01:00 +02:00
parent cff541d58e
commit ef78bff9be
13 changed files with 80 additions and 154 deletions

View File

@@ -3,9 +3,7 @@ package de.hwr_berlin.it14.postgrachelor;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.Log;
import android.support.design.widget.NavigationView;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
@@ -16,10 +14,14 @@ import de.hwr_berlin.it14.postgrachelor.Services.GameService;
import de.hwr_berlin.it14.postgrachelor.Services.HighscoreService;
import de.hwr_berlin.it14.postgrachelor.Services.LoginService;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
public class MainActivity extends AppCompatActivity {
private static class FragmentState {
private static final int LOGIN = 0x1;
private static final int MAIN = 0x2;
private static final int QUESTION_END = 0x4;
private static final int QUESTION = 0x8;
}
private static final String NAME = "MainActivity";
private FragmentManager myFragmentManager;
@@ -56,45 +58,30 @@ public class MainActivity extends AppCompatActivity
@Override
public void onLoginEvent(String name, String uid) {
Log.d("Activity fragment", "onLogin - name: " + name + " - uid: " + uid);
/*NavigationView nav_view = (NavigationView) that.findViewById(R.id.nav_view);
TextView user_uid = (TextView) nav_view.getHeaderView(0).findViewById(R.id.user_uid);
TextView user_name = (TextView) nav_view.getHeaderView(0).findViewById(R.id.user_name);
user_name.setText(name);
user_uid.setText(uid);*/
that.onNavigationItemSelectedID(R.id.nav_gallery);
that.selectFragment(FragmentState.MAIN);
}
@Override
public void onLogoutEvent(int status, String message) {
Log.d("Activity fragment", "onLogout - name: " + status + " - uid: " + message);
that.onNavigationItemSelectedID(R.id.nav_camera);
that.selectFragment(FragmentState.LOGIN);
}
});
GameService.addGameStateChangeEventListener(NAME, new GameService.OnGameStateChangeEventListener() {
@Override
public void onGameStateChangeEvent(int previous, int state) {
Log.d("Activity fragment", "onGameStateChange - previous: " + previous + " - state: " + state);
if (state == GameService.States.RUNNING || state == GameService.States.ONHOLD_LOADING || state == GameService.States.ONHOLD_RESULT)
that.onNavigationItemSelectedID(R.id.nav_manage);
else if (previous == GameService.States.ONHOLD_RESULT && state == GameService.States.END) {
that.onNavigationItemSelectedID(R.id.nav_slideshow);
if (state == GameService.States.RUNNING || state == GameService.States.ON_HOLD_LOADING || state == GameService.States.ON_HOLD_RESULT)
that.selectFragment(FragmentState.QUESTION);
else if (previous == GameService.States.ON_HOLD_RESULT && state == GameService.States.END) {
that.selectFragment(FragmentState.QUESTION_END);
} else if (state == GameService.States.PAUSED || state == GameService.States.END) {
that.onNavigationItemSelectedID(R.id.nav_gallery);
that.selectFragment(FragmentState.MAIN);
}
}
});
}
@Override
public void onBackPressed() {
/*DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
@@ -117,25 +104,21 @@ public class MainActivity extends AppCompatActivity
return super.onOptionsItemSelected(item);
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
return this.onNavigationItemSelectedID(item.getItemId());
}
private boolean onNavigationItemSelectedID(int item) {
private void selectFragment(int item) {
// Handle navigation view item clicks here.
try {
boolean isLoggedIn = LoginService.isLoggedIn();
if (!isLoggedIn && (item != R.id.nav_camera)) {
return false;
} else if (isLoggedIn && (item == R.id.nav_camera)) {
return false;
if (!isLoggedIn && (item != FragmentState.LOGIN)) {
return;
} else if (isLoggedIn && (item == FragmentState.LOGIN)) {
return;
}
} catch (NotInstantiatedException e) {
e.printStackTrace();
return;
}
if (item == R.id.nav_camera) {
if (item == FragmentState.LOGIN) {
// Handle the camera action
LoginFragment fragment = (LoginFragment) myFragmentManager.findFragmentByTag(LoginFragment.NAME);
if (fragment == null) {
@@ -143,21 +126,21 @@ public class MainActivity extends AppCompatActivity
fragmentTransaction.replace(R.id.relative_content, loginFragment, LoginFragment.NAME);
fragmentTransaction.commit();
}
} else if (item == R.id.nav_gallery) {
} else if (item == FragmentState.MAIN) {
MainFragment fragment = (MainFragment) myFragmentManager.findFragmentByTag(MainFragment.NAME);
if (fragment == null) {
FragmentTransaction fragmentTransaction = myFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.relative_content, mainFragment, MainFragment.NAME);
fragmentTransaction.commit();
}
} else if (item == R.id.nav_slideshow) {
} else if (item == FragmentState.QUESTION_END) {
QuestionEndFragment fragment = (QuestionEndFragment) myFragmentManager.findFragmentByTag(QuestionEndFragment.NAME);
if (fragment == null) {
FragmentTransaction fragmentTransaction = myFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.relative_content, questionEndFragment, QuestionEndFragment.NAME);
fragmentTransaction.commit();
}
} else if (item == R.id.nav_manage) {
} else if (item == FragmentState.QUESTION) {
QuestionFragment fragment = (QuestionFragment) myFragmentManager.findFragmentByTag(QuestionFragment.NAME);
if (fragment == null) {
FragmentTransaction fragmentTransaction = myFragmentManager.beginTransaction();
@@ -165,9 +148,5 @@ public class MainActivity extends AppCompatActivity
fragmentTransaction.commit();
}
}
//DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
//drawer.closeDrawer(GravityCompat.START);
return true;
}
}

View File

@@ -100,7 +100,7 @@ public class MainFragment extends Fragment {
while(iterator.hasNext()) {
HighscoresCategories category = iterator.next();
categoryView = inflater.inflate(R.layout.fragment_main_category, null);
categoryView = inflater.inflate(R.layout.fragment_main_category, gridLayoutCategories, false);
textView = (TextView) categoryView.findViewById(R.id.textViewCategory);
textView.setText(category.getName());

View File

@@ -73,7 +73,7 @@ public class QuestionFragment extends Fragment {
@Override
public void onClick(View v) {
try {
if (GameService.getState() != GameService.States.ONHOLD_RESULT)
if (GameService.getState() != GameService.States.ON_HOLD_RESULT)
GameService.answer((int) v.getTag());
} catch (NotInstantiatedException | NotLoggedInException | NoCurrentQuestionException e) {
e.printStackTrace();
@@ -146,7 +146,8 @@ public class QuestionFragment extends Fragment {
GameService.addGameStateChangeEventListener(NAME, new GameService.OnGameStateChangeEventListener() {
@Override
public void onGameStateChangeEvent(int previous, int state) {
if (previous == GameService.States.END && state == GameService.States.RUNNING)
Log.d(NAME, Conversion.intToStr(previous, 5)+Conversion.intToStr(state,5));
if (previous != GameService.States.ON_HOLD_RESULT && state == GameService.States.RUNNING)
totalView.setText(R.string._0);
}
});

View File

@@ -19,16 +19,18 @@ import de.hwr_berlin.it14.postgrachelor.Types.GameScores;
import de.hwr_berlin.it14.postgrachelor.Types.Question;
import de.hwr_berlin.it14.postgrachelor.Types.QuestionResult;
import de.hwr_berlin.it14.postgrachelor.Types.Timings;
import de.hwr_berlin.it14.postgrachelor.Utils.Conversion;
import de.hwr_berlin.it14.postgrachelor.Utils.JsonRequestPG;
/**
* Created by Sebastian on 27.03.2017.
* Game service controls gameflow
* Game service controls game flow
*/
public class GameService {
private static final int GAME_TICK_INTERVAL = 100;
private static final int NEXT_QUESTION_DELAY = 1250;
private static final int QUESTION_COUNT = 10;
private static long startTime;
@@ -40,8 +42,8 @@ public class GameService {
private States() {}
public static final int UNINITIALIZED = 1;
public static final int END = 2;
public static final int ONHOLD_LOADING = 4;
public static final int ONHOLD_RESULT = 8;
public static final int ON_HOLD_LOADING = 4;
public static final int ON_HOLD_RESULT = 8;
public static final int RUNNING = 16;
public static final int PAUSED = 32;
}
@@ -112,6 +114,7 @@ public class GameService {
}
}
@SuppressWarnings("SameParameterValue")
public static void addNextQuestionEventListener(String key, OnNextQuestionEventListener onNextQuestionEventListener) {
Log.d("GameService Fragment", "addNextQuestionEventListener");
nextQuestionEventListeners.put(key, onNextQuestionEventListener);
@@ -125,6 +128,7 @@ public class GameService {
}
}
@SuppressWarnings("SameParameterValue")
public static void addResultEventListener(String key, OnResultEventListener onResultEventListener) {
resultEventListeners.put(key, onResultEventListener);
if (GameService.initialized)
@@ -149,6 +153,7 @@ public class GameService {
}
}
@SuppressWarnings("SameParameterValue")
public static void addTickEventListener(String key, OnTickEventListener onTickEventListener) {
gameTickEventListeners.put(key, onTickEventListener);
if (GameService.initialized)
@@ -373,7 +378,7 @@ public class GameService {
final int state = GameService.getState();
long time;
if (state == States.ONHOLD_LOADING) {
if (state == States.ON_HOLD_LOADING) {
long end = GameService.getEndTime();
long start = GameService.getStartTime();
time = end - start;
@@ -382,7 +387,7 @@ public class GameService {
long end = System.currentTimeMillis();
long start = GameService.getStartTime();
GameService.setEndTime(end);
GameService.setState(States.ONHOLD_LOADING);
GameService.setState(States.ON_HOLD_LOADING);
time = end - start;
GameService.setAnswer(id);
} else {
@@ -410,7 +415,7 @@ public class GameService {
data_result.optInt("correctPos", 0),
data_result.optInt("total", 0)
);
GameService.setStateSave(States.ONHOLD_RESULT);
GameService.setStateSave(States.ON_HOLD_RESULT);
GameService.setResultSave(result);
new android.os.Handler().postDelayed(new Runnable() {
@@ -457,6 +462,7 @@ public class GameService {
else
throw new NotLoggedInException();
params.put("uid", uid);
params.put("length", Conversion.intToStr(GameService.QUESTION_COUNT));
JsonRequestPG requester = new JsonRequestPG("start.php", params, GameService.activity, new JsonRequestPG.AsyncResponse() {
@Override
public void processFinish(JSONObject data) {

View File

@@ -26,10 +26,11 @@ public class Conversion {
return String.format(Locale.getDefault(), "%1d", i);
}
private static String intToStr(int i, int padding) {
public static String intToStr(int i, int padding) {
return String.format(Locale.getDefault(), "%"+Conversion.intToStr(padding)+"s", i);
}
@SuppressWarnings("SameParameterValue")
private static String intToStr(int i, int padding, char padChar) {
return Conversion.intToStr(i, padding).replace(' ', padChar);
}

View File

@@ -7,7 +7,6 @@ import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -19,15 +18,15 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Scanner;
import java.util.StringTokenizer;
import de.hwr_berlin.it14.postgrachelor.R;
import static android.content.ContentValues.TAG;
abstract class JsonRequest extends AsyncTask<Void, Void, JSONObject> {
private final String connectionURL;
protected final String path;
private final String path;
private final HashMap<String, String> params;
final Activity activity;
private ProgressDialog pDialog;
@@ -40,6 +39,7 @@ abstract class JsonRequest extends AsyncTask<Void, Void, JSONObject> {
Log.d("fragment, JSONRequest", connectionURL+path);
}
@SuppressWarnings("SameReturnValue")
protected abstract String getConnectionURL();
@Override
@@ -48,7 +48,7 @@ abstract class JsonRequest extends AsyncTask<Void, Void, JSONObject> {
Log.d("fragment, JSONRequest", "onPre1");
// Showing progress dialog
pDialog = new ProgressDialog(this.activity);
pDialog.setMessage("Please wait...");
pDialog.setMessage(this.activity.getString(R.string.please_wait));
pDialog.setCancelable(false);
pDialog.show();
}

View File

@@ -2,8 +2,6 @@ package de.hwr_berlin.it14.postgrachelor.Utils;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import org.json.JSONObject;

View File

@@ -3,17 +3,17 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="@layout/fragment_main"
android:background="#FF33B5E6"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="start"
android:background="#FF33B5E6"
android:padding="5dp"
>
tools:ignore="Overdraw">
<TextView
android:id="@+id/textViewCategory"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:text="@string/hello_blank_fragment" />
android:text="@string/category" />
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:id="@+id/progressBarCategory"

View File

@@ -26,7 +26,7 @@
android:textAppearance="@style/Base.TextAppearance.AppCompat.Title"
android:textColor="@android:color/white"
android:padding="10dp"
android:text="@string/hello_blank_fragment" />
android:text="@string/app_name" />
<TextView
android:id="@+id/fragment_user_score"

View File

@@ -1,38 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:contentDescription="@string/launcher_icon"
app:srcCompat="@mipmap/ic_launcher" />
<TextView
android:id="@+id/user_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="@string/android_studio"
android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
<TextView
android:id="@+id/user_uid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:text="@string/android_studio_email" />
</LinearLayout>

View File

@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_camera"
android:icon="@drawable/ic_menu_camera"
android:title="Login"
tools:ignore="HardcodedText" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery"
tools:ignore="HardcodedText" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="Slideshow"
tools:ignore="HardcodedText" />
<item
android:id="@+id/nav_manage"
android:icon="@drawable/ic_menu_manage"
android:title="Tools"
tools:ignore="HardcodedText" />
</group>
<item android:title="Communicate"
tools:ignore="HardcodedText">
<menu>
<item
android:id="@+id/nav_share"
android:icon="@drawable/ic_menu_share"
android:title="Share"
tools:ignore="HardcodedText" />
</menu>
</item>
</menu>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_settings">Einstellungen</string>
<string name="enter_user_name">Benutzername eingeben…</string>
<string name="welcome_text">Willkommen zu unserer sinnlosen App! Beweise, dass du schlauer bist als wir und beantworte unsere Fragen!</string>
<string name="register_btn">Registrieren</string>
<string name="start_test">Test starten!</string>
<string name="test_completed">Test beendet!</string>
<string name="return_btn">Zurück</string>
<string name="android_studio_email">android.studio@android.com</string>
<string name="no_highscores_available">Highscores konnten nicht geladen werden!</string>
<string name="resume_test">Test wiederaufnehmen!</string>
<string name="no_score">Keine Punkte</string>
<string name="no_time">Keine Zeit</string>
<string name="category">Kategorie: %1$s</string>
<string name="no_question_available">Keine Fragen verfügbar!</string>
<string name="play_a_game">Spiele ein Spiel!</string>
<string name="please_wait">Bitte warten…</string>
</resources>

View File

@@ -1,31 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">PostGrachelor</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>
<string name="app_name" translatable="false">PostGrachelor</string>
<string name="action_settings">Settings</string>
<string name="enter_user_name">Enter User Name…</string>
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="hello_login_fragment">Hello login fragment</string>
<string name="welcome_text">Welcome to our stupid app. Prove that you are smarter than we are and answer our questions!</string>
<string name="register_btn">Register</string>
<string name="start_test">Start Test!</string>
<string name="test_completed">Test completed!</string>
<string name="_1337">1337</string>
<string name="_1337" translatable="false">1337</string>
<string name="return_btn">Return</string>
<string name="launcher_icon">Launcher Icon</string>
<string name="android_studio">Android Studio</string>
<string name="launcher_icon" translatable="false">Launcher Icon</string>
<string name="android_studio_email">android.studio@android.com</string>
<string name="no_highscores_available">Highscores could not be loaded!</string>
<string name="resume_test">Resume Test!</string>
<string name="_02_15">02:15</string>
<string name="_02_15" translatable="false">02:15</string>
<string name="no_score">No Score</string>
<string name="no_time">No Time</string>
<string name="category">Category: %1$s</string>
<string name="no_question_available">No question available!</string>
<string name="_0">0</string>
<string name="_0" translatable="false">0</string>
<string name="play_a_game">Play a Game!</string>
<string name="please_wait">Please wait…</string>
</resources>