Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ttt
TTTAndroidJoinedClient
Commits
07492c3a
Commit
07492c3a
authored
Jun 12, 2014
by
Thomas Krex
Browse files
added feedback library -> enables feedback function for user,
developer can answer directly to the user by email
parent
0ae49c6c
Changes
59
Expand all
Hide whitespace changes
Inline
Side-by-side
.project
0 → 100644
View file @
07492c3a
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>
TTTAndroidClient
</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
TTTCLient/.classpath
View file @
07492c3a
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry
kind=
"src"
path=
"src"
/>
<classpathentry
kind=
"src"
path=
"gen"
/>
<classpathentry
kind=
"con"
path=
"com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"
/>
<classpathentry
exported=
"true"
kind=
"con"
path=
"com.android.ide.eclipse.adt.LIBRARIES"
/>
<classpathentry
exported=
"true"
kind=
"con"
path=
"com.android.ide.eclipse.adt.DEPENDENCIES"
/>
<classpathentry
kind=
"lib"
path=
"libs/commons-io-2.4.jar"
/>
<classpathentry
kind=
"src"
path=
"src"
/>
<classpathentry
kind=
"src"
path=
"gen"
/>
<classpathentry
kind=
"output"
path=
"bin/classes"
/>
</classpath>
TTTCLient/AndroidManifest.xml
View file @
07492c3a
...
...
@@ -36,6 +36,15 @@
android:configChanges=
"orientation|screenSize"
android:label=
"Feeds"
android:launchMode=
"singleTask"
>
<intent-filter>
<data
android:scheme=
"http"
/>
<data
android:host=
"ttt.in.tum.de"
/>
<data
android:pathPattern=
".*"
/>
<action
android:name=
"android.intent.action.VIEW"
/>
<category
android:name=
"android.intent.category.DEFAULT"
/>
<category
android:name=
"android.intent.category.BROWSABLE"
/>
</intent-filter>
</activity>
<activity
android:name=
"tttclient.activities.FeedDetailActivity"
...
...
TTTCLient/libs/feedback_v6.jar
0 → 100644
View file @
07492c3a
File added
TTTCLient/res/drawable-xxhdpi/my_button_border.xml
0 → 100644
View file @
07492c3a
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
<stroke
android:width=
"1dip"
android:color=
"@android:color/background_dark"
>
</stroke>
</shape>
\ No newline at end of file
TTTCLient/res/layout/activity_main.xml
View file @
07492c3a
...
...
@@ -14,8 +14,16 @@
android:layout_height=
"wrap_content"
android:layout_centerHorizontal=
"true"
android:layout_marginTop=
"75dp"
android:background=
"@android:color/transparent"
android:text=
"@string/watch"
>
</Button>
android:text=
"@string/watch"
/>
<Button
android:id=
"@+id/feedback_button"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_alignLeft=
"@+id/watch_button"
android:layout_alignRight=
"@+id/watch_button"
android:layout_below=
"@+id/watch_button"
android:layout_marginTop=
"124dp"
android:text=
"Feedback"
/>
</RelativeLayout>
\ No newline at end of file
TTTCLient/src/tttclient/activities/FeedActivity.java
View file @
07492c3a
...
...
@@ -188,6 +188,16 @@ public class FeedActivity extends SherlockActivity implements
}
});
Intent
intent
=
getIntent
();
String
action
=
intent
.
getAction
();
if
(
Intent
.
ACTION_VIEW
.
equals
(
action
))
{
Log
.
d
(
"IntentFIlter"
,
intent
.
getDataString
());
urlTxt
.
setText
(
intent
.
getDataString
());
addDialog
.
show
();
}
}
@Override
...
...
TTTCLient/src/tttclient/activities/MainActivity.java
View file @
07492c3a
...
...
@@ -7,6 +7,7 @@ import android.view.View.OnClickListener;
import
android.widget.Button
;
import
com.actionbarsherlock.app.SherlockActivity
;
import
com.suredigit.inappfeedback.FeedbackDialog
;
import
de.tum.in.tttclient.R
;
...
...
@@ -17,11 +18,14 @@ import de.tum.in.tttclient.R;
*
*/
public
class
MainActivity
extends
SherlockActivity
{
private
FeedbackDialog
feedBack
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_main
);
feedBack
=
new
FeedbackDialog
(
this
,
"AF-C588E3CDEF37-CB"
);
Button
watchButton
=
(
Button
)
findViewById
(
R
.
id
.
watch_button
);
watchButton
.
setOnClickListener
(
new
OnClickListener
()
{
...
...
@@ -33,6 +37,21 @@ public class MainActivity extends SherlockActivity {
}
});
Button
feedbackButton
=
(
Button
)
findViewById
(
R
.
id
.
feedback_button
);
feedbackButton
.
setOnClickListener
(
new
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
feedBack
.
show
();
}
});
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
feedBack
.
dismiss
();
}
}
actionbarsherlock/src/com/actionbarsherlock/app/SherlockActivity.java
View file @
07492c3a
...
...
@@ -136,7 +136,8 @@ public abstract class SherlockActivity extends Activity implements OnCreatePanel
return
getSherlock
().
getMenuInflater
();
}
public
void
invalidateOptionsMenu
()
{
@Override
public
void
invalidateOptionsMenu
()
{
getSherlock
().
dispatchInvalidateOptionsMenu
();
}
...
...
actionbarsherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java
View file @
07492c3a
...
...
@@ -125,7 +125,8 @@ public abstract class SherlockExpandableListActivity extends ExpandableListActiv
return
getSherlock
().
getMenuInflater
();
}
public
void
invalidateOptionsMenu
()
{
@Override
public
void
invalidateOptionsMenu
()
{
getSherlock
().
dispatchInvalidateOptionsMenu
();
}
...
...
actionbarsherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java
View file @
07492c3a
...
...
@@ -137,19 +137,22 @@ public class SherlockFragmentActivity extends Watson implements OnActionModeStar
// Native menu handling
///////////////////////////////////////////////////////////////////////////
public
MenuInflater
getSupportMenuInflater
()
{
@Override
public
MenuInflater
getSupportMenuInflater
()
{
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
"[getSupportMenuInflater]"
);
return
getSherlock
().
getMenuInflater
();
}
public
void
invalidateOptionsMenu
()
{
@Override
public
void
invalidateOptionsMenu
()
{
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
"[invalidateOptionsMenu]"
);
getSherlock
().
dispatchInvalidateOptionsMenu
();
}
public
void
supportInvalidateOptionsMenu
()
{
@Override
public
void
supportInvalidateOptionsMenu
()
{
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
"[supportInvalidateOptionsMenu]"
);
invalidateOptionsMenu
();
...
...
@@ -234,15 +237,18 @@ public class SherlockFragmentActivity extends Watson implements OnActionModeStar
// Sherlock menu handling
///////////////////////////////////////////////////////////////////////////
public
boolean
onCreateOptionsMenu
(
Menu
menu
)
{
@Override
public
boolean
onCreateOptionsMenu
(
Menu
menu
)
{
return
true
;
}
public
boolean
onPrepareOptionsMenu
(
Menu
menu
)
{
@Override
public
boolean
onPrepareOptionsMenu
(
Menu
menu
)
{
return
true
;
}
public
boolean
onOptionsItemSelected
(
MenuItem
item
)
{
@Override
public
boolean
onOptionsItemSelected
(
MenuItem
item
)
{
return
false
;
}
...
...
actionbarsherlock/src/com/actionbarsherlock/app/SherlockListActivity.java
View file @
07492c3a
...
...
@@ -136,7 +136,8 @@ public abstract class SherlockListActivity extends ListActivity implements OnCre
return
getSherlock
().
getMenuInflater
();
}
public
void
invalidateOptionsMenu
()
{
@Override
public
void
invalidateOptionsMenu
()
{
getSherlock
().
dispatchInvalidateOptionsMenu
();
}
...
...
actionbarsherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java
View file @
07492c3a
...
...
@@ -136,7 +136,8 @@ public abstract class SherlockPreferenceActivity extends PreferenceActivity impl
return
getSherlock
().
getMenuInflater
();
}
public
void
invalidateOptionsMenu
()
{
@Override
public
void
invalidateOptionsMenu
()
{
getSherlock
().
dispatchInvalidateOptionsMenu
();
}
...
...
actionbarsherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java
View file @
07492c3a
This diff is collapsed.
Click to expand it.
actionbarsherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java
View file @
07492c3a
package
com.actionbarsherlock.internal
;
import
org.xmlpull.v1.XmlPullParser
;
import
android.app.Activity
;
import
android.content.Context
;
import
android.content.res.AssetManager
;
...
...
@@ -7,176 +9,200 @@ import android.content.res.XmlResourceParser;
import
android.os.Build
;
import
android.util.DisplayMetrics
;
import
android.util.Log
;
import
com.actionbarsherlock.ActionBarSherlock
;
import
com.actionbarsherlock.R
;
import
org.xmlpull.v1.XmlPullParser
;
public
final
class
ResourcesCompat
{
private
static
final
String
TAG
=
"ResourcesCompat"
;
//No instances
private
ResourcesCompat
()
{}
/**
* Support implementation of {@code getResources().getBoolean()} that we
* can use to simulate filtering based on width and smallest width
* qualifiers on pre-3.2.
*
* @param context Context to load booleans from on 4.0+ and to fetch the
* display metrics.
* @param id Id of boolean to load.
* @return Associated boolean value as reflected by the current display
* metrics.
*/
public
static
boolean
getResources_getBoolean
(
Context
context
,
int
id
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
ICE_CREAM_SANDWICH
)
{
return
context
.
getResources
().
getBoolean
(
id
);
}
DisplayMetrics
metrics
=
context
.
getResources
().
getDisplayMetrics
();
float
widthDp
=
metrics
.
widthPixels
/
metrics
.
density
;
float
heightDp
=
metrics
.
heightPixels
/
metrics
.
density
;
float
smallestWidthDp
=
(
widthDp
<
heightDp
)
?
widthDp
:
heightDp
;
if
(
id
==
R
.
bool
.
abs__action_bar_embed_tabs
)
{
if
(
widthDp
>=
480
)
{
return
true
;
//values-w480dp
}
return
false
;
//values
}
if
(
id
==
R
.
bool
.
abs__split_action_bar_is_narrow
)
{
if
(
widthDp
>=
480
)
{
return
false
;
//values-w480dp
}
return
true
;
//values
}
if
(
id
==
R
.
bool
.
abs__action_bar_expanded_action_views_exclusive
)
{
if
(
smallestWidthDp
>=
600
)
{
return
false
;
//values-sw600dp
}
return
true
;
//values
}
if
(
id
==
R
.
bool
.
abs__config_allowActionMenuItemTextWithIcon
)
{
if
(
widthDp
>=
480
)
{
return
true
;
//values-w480dp
}
return
false
;
//values
}
throw
new
IllegalArgumentException
(
"Unknown boolean resource ID "
+
id
);
}
/**
* Support implementation of {@code getResources().getInteger()} that we
* can use to simulate filtering based on width qualifiers on pre-3.2.
*
* @param context Context to load integers from on 3.2+ and to fetch the
* display metrics.
* @param id Id of integer to load.
* @return Associated integer value as reflected by the current display
* metrics.
*/
public
static
int
getResources_getInteger
(
Context
context
,
int
id
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
HONEYCOMB_MR2
)
{
return
context
.
getResources
().
getInteger
(
id
);
}
DisplayMetrics
metrics
=
context
.
getResources
().
getDisplayMetrics
();
float
widthDp
=
metrics
.
widthPixels
/
metrics
.
density
;
if
(
id
==
R
.
integer
.
abs__max_action_buttons
)
{
if
(
widthDp
>=
600
)
{
return
5
;
//values-w600dp
}
if
(
widthDp
>=
500
)
{
return
4
;
//values-w500dp
}
if
(
widthDp
>=
360
)
{
return
3
;
//values-w360dp
}
return
2
;
//values
}
throw
new
IllegalArgumentException
(
"Unknown integer resource ID "
+
id
);
}
/**
* Attempt to programmatically load the logo from the manifest file of an
* activity by using an XML pull parser. This should allow us to read the
* logo attribute regardless of the platform it is being run on.
*
* @param activity Activity instance.
* @return Logo resource ID.
*/
public
static
int
loadLogoFromManifest
(
Activity
activity
)
{
int
logo
=
0
;
try
{
final
String
thisPackage
=
activity
.
getClass
().
getName
();
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
i
(
TAG
,
"Parsing AndroidManifest.xml for "
+
thisPackage
);
final
String
packageName
=
activity
.
getApplicationInfo
().
packageName
;
final
AssetManager
am
=
activity
.
createPackageContext
(
packageName
,
0
).
getAssets
();
final
XmlResourceParser
xml
=
am
.
openXmlResourceParser
(
"AndroidManifest.xml"
);
int
eventType
=
xml
.
getEventType
();
while
(
eventType
!=
XmlPullParser
.
END_DOCUMENT
)
{
if
(
eventType
==
XmlPullParser
.
START_TAG
)
{
String
name
=
xml
.
getName
();
if
(
"application"
.
equals
(
name
))
{
//Check if the <application> has the attribute
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
"Got <application>"
);
for
(
int
i
=
xml
.
getAttributeCount
()
-
1
;
i
>=
0
;
i
--)
{
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
xml
.
getAttributeName
(
i
)
+
": "
+
xml
.
getAttributeValue
(
i
));
if
(
"logo"
.
equals
(
xml
.
getAttributeName
(
i
)))
{
logo
=
xml
.
getAttributeResourceValue
(
i
,
0
);
break
;
//out of for loop
}
}
}
else
if
(
"activity"
.
equals
(
name
))
{
//Check if the <activity> is us and has the attribute
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
"Got <activity>"
);
Integer
activityLogo
=
null
;
String
activityPackage
=
null
;
boolean
isOurActivity
=
false
;
for
(
int
i
=
xml
.
getAttributeCount
()
-
1
;
i
>=
0
;
i
--)
{
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
xml
.
getAttributeName
(
i
)
+
": "
+
xml
.
getAttributeValue
(
i
));
//We need both uiOptions and name attributes
String
attrName
=
xml
.
getAttributeName
(
i
);
if
(
"logo"
.
equals
(
attrName
))
{
activityLogo
=
xml
.
getAttributeResourceValue
(
i
,
0
);
}
else
if
(
"name"
.
equals
(
attrName
))
{
activityPackage
=
ActionBarSherlockCompat
.
cleanActivityName
(
packageName
,
xml
.
getAttributeValue
(
i
));
if
(!
thisPackage
.
equals
(
activityPackage
))
{
break
;
//on to the next
}
isOurActivity
=
true
;
}
//Make sure we have both attributes before processing
if
((
activityLogo
!=
null
)
&&
(
activityPackage
!=
null
))
{
//Our activity, logo specified, override with our value
logo
=
activityLogo
.
intValue
();
}
}
if
(
isOurActivity
)
{
//If we matched our activity but it had no logo don't
//do any more processing of the manifest
break
;
}
}
}
eventType
=
xml
.
nextToken
();
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
i
(
TAG
,
"Returning "
+
Integer
.
toHexString
(
logo
));
return
logo
;
}
private
static
final
String
TAG
=
"ResourcesCompat"
;
// No instances
private
ResourcesCompat
()
{
}
/**
* Support implementation of {@code getResources().getBoolean()} that we can
* use to simulate filtering based on width and smallest width qualifiers on
* pre-3.2.
*
* @param context
* Context to load booleans from on 4.0+ and to fetch the display
* metrics.
* @param id
* Id of boolean to load.
* @return Associated boolean value as reflected by the current display
* metrics.
*/
public
static
boolean
getResources_getBoolean
(
Context
context
,
int
id
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
ICE_CREAM_SANDWICH
)
{
return
context
.
getResources
().
getBoolean
(
id
);
}
DisplayMetrics
metrics
=
context
.
getResources
().
getDisplayMetrics
();
float
widthDp
=
metrics
.
widthPixels
/
metrics
.
density
;
float
heightDp
=
metrics
.
heightPixels
/
metrics
.
density
;
float
smallestWidthDp
=
(
widthDp
<
heightDp
)
?
widthDp
:
heightDp
;
if
(
id
==
R
.
bool
.
abs__action_bar_embed_tabs
)
{
if
(
widthDp
>=
480
)
{
return
true
;
// values-w480dp
}
return
false
;
// values
}
if
(
id
==
R
.
bool
.
abs__split_action_bar_is_narrow
)
{
if
(
widthDp
>=
480
)
{
return
false
;
// values-w480dp
}
return
true
;
// values
}
if
(
id
==
R
.
bool
.
abs__action_bar_expanded_action_views_exclusive
)
{
if
(
smallestWidthDp
>=
600
)
{
return
false
;
// values-sw600dp
}
return
true
;
// values
}
if
(
id
==
R
.
bool
.
abs__config_allowActionMenuItemTextWithIcon
)
{
if
(
widthDp
>=
480
)
{
return
true
;
// values-w480dp
}
return
false
;
// values
}
throw
new
IllegalArgumentException
(
"Unknown boolean resource ID "
+
id
);
}
/**
* Support implementation of {@code getResources().getInteger()} that we can
* use to simulate filtering based on width qualifiers on pre-3.2.
*
* @param context
* Context to load integers from on 3.2+ and to fetch the display
* metrics.
* @param id
* Id of integer to load.
* @return Associated integer value as reflected by the current display
* metrics.
*/
public
static
int
getResources_getInteger
(
Context
context
,
int
id
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
HONEYCOMB_MR2
)
{
return
context
.
getResources
().
getInteger
(
id
);
}
DisplayMetrics
metrics
=
context
.
getResources
().
getDisplayMetrics
();
float
widthDp
=
metrics
.
widthPixels
/
metrics
.
density
;
if
(
id
==
R
.
integer
.
abs__max_action_buttons
)
{
if
(
widthDp
>=
600
)
{
return
5
;
// values-w600dp
}
if
(
widthDp
>=
500
)
{
return
4
;
// values-w500dp
}
if
(
widthDp
>=
360
)
{
return
3
;
// values-w360dp
}
return
2
;
// values
}
throw
new
IllegalArgumentException
(
"Unknown integer resource ID "
+
id
);
}
/**
* Attempt to programmatically load the logo from the manifest file of an
* activity by using an XML pull parser. This should allow us to read the
* logo attribute regardless of the platform it is being run on.
*
* @param activity
* Activity instance.
* @return Logo resource ID.
*/
public
static
int
loadLogoFromManifest
(
Activity
activity
)
{
int
logo
=
0
;
try
{
final
String
thisPackage
=
activity
.
getClass
().
getName
();
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
i
(
TAG
,
"Parsing AndroidManifest.xml for "
+
thisPackage
);
final
String
packageName
=
activity
.
getApplicationInfo
().
packageName
;
final
AssetManager
am
=
activity
.
createPackageContext
(
packageName
,
0
).
getAssets
();
final
XmlResourceParser
xml
=
am
.
openXmlResourceParser
(
"AndroidManifest.xml"
);
int
eventType
=
xml
.
getEventType
();
while
(
eventType
!=
XmlPullParser
.
END_DOCUMENT
)
{
if
(
eventType
==
XmlPullParser
.
START_TAG
)
{
String
name
=
xml
.
getName
();
if
(
"application"
.
equals
(
name
))
{
// Check if the <application> has the attribute
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
"Got <application>"
);
for
(
int
i
=
xml
.
getAttributeCount
()
-
1
;
i
>=
0
;
i
--)
{
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
xml
.
getAttributeName
(
i
)
+
": "
+
xml
.
getAttributeValue
(
i
));
if
(
"logo"
.
equals
(
xml
.
getAttributeName
(
i
)))
{
logo
=
xml
.
getAttributeResourceValue
(
i
,
0
);
break
;
// out of for loop
}
}
}
else
if
(
"activity"
.
equals
(
name
))
{
// Check if the <activity> is us and has the attribute
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
"Got <activity>"
);
Integer
activityLogo
=
null
;
String
activityPackage
=
null
;
boolean
isOurActivity
=
false
;
for
(
int
i
=
xml
.
getAttributeCount
()
-
1
;
i
>=
0
;
i
--)
{
if
(
ActionBarSherlock
.
DEBUG
)
Log
.
d
(
TAG
,
xml
.
getAttributeName
(
i
)
+
": "
+
xml
.
getAttributeValue
(
i
));
// We need both uiOptions and name attributes
String
attrName
=
xml
.
getAttributeName
(
i
);
if
(
"logo"
.
equals
(
attrName
))
{
activityLogo
=
xml
.
getAttributeResourceValue
(
i
,
0
);
}
else
if
(
"name"
.
equals
(
attrName
))
{
activityPackage
=
ActionBarSherlockCompat
.
cleanActivityName
(
packageName
,
xml
.
getAttributeValue
(
i
));
if
(!
thisPackage
.
equals
(
activityPackage
))
{
break
;
// on to the next
}